python - 如何在OpenCV Python中设置框架的高度和宽度

标签 python image opencv image-processing

我正在opencv python(pi)上的raspberry pi 4项目上工作。 Pi连接到分辨率为800x480的屏幕。 Picamera还连接到pi以获取实时视频。我需要在框架的右侧显示视频源,并在框架的左侧显示一些信息。为此,我有以下代码:

frame = cap.read()

frame = imutils.resize(frame, width=400, height=480)
frame2 = np.zeros((frame.shape[0], 400, frame.shape[2]), dtype=frame.dtype)

(H, W) = frame.shape[:2]
(H1, W1) = frame2.shape[:2]
print("Frame {}, {}".format(H, W))
print("Frame2 {}, {}".format(H1, W1))


cv2.putText(frame2, "Some Information", (5, 30), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1)
cv2.putText(frame2, "More Information", (5, 60), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1)
cv2.putText(frame2, "Some More Information", (5, 90), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1)

image = np.hstack((frame2, frame))

cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)
cv2.setWindowProperty(win_name, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
cv2.imshow(win_name, image)

key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
    break

代码说明:

我将frame的大小调整为400x480,因为我们拥有的总宽度为800,所以我将其分为两个相等的部分,并保持高度与相同480相同。此frame将在右侧显示视频供稿。我还创建了frame2,它将在左侧显示信息。我也将其宽度保持为400,不确定如何在其中设置高度。运行此代码,我得到以下输出:

enter image description here

如您所见,输出帧被平均分为宽度为400的两个部分,但高度已减小为300,如打印输出所示
Frame 300, 400
Frame2 300, 400

谁能解释一下为什么将高度降低到300而不是480。有什么办法可以保持480的高度。请帮忙。谢谢

最佳答案

imutils.resize实际上不会通过使用所需的宽度和高度来调整图像的大小。它使用一个或另一个来缩放图像。由于函数中的逻辑,它优先于宽度而不是高度,因此所需图像的大小调整为400的宽度,但高度调整为300,以保持原始帧的长宽比不变。换句话说,它以保留宽高比的方式调整图像大小。我在以下OpenCV论坛中找到了imutils.resize的来源:https://answers.opencv.org/question/208857/what-is-the-difference-between-cv2resize-and-imutilsresize/

如果您希望将图像调整为480 x 400,请改为使用 cv2.resize :

frame = cv2.resize(frame, (400, 480))

关于python - 如何在OpenCV Python中设置框架的高度和宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62227441/

相关文章:

opencv - 使用 OpenCV : ffmpeg? 打开 avi 文件

python - 替换字符串中的货币值时,Python 中的 re.sub() 并不总是有效

css - 将响应图像裁剪到偏离中心点

java - JPanel 遮挡 BufferedImage

Java OpenCV FileStorage 和 Mat.push_back

c++ - 读取 vector<Mat> 或 Video ? (Opencv 和 C++)

python - 如何仅下载数据 Python 的前 x 个字节

Python-我的 for 循环只将列表的一半从 str 转换为 int

python - 将 Numpy 数组传递给 C 函数以进行输入和输出

javascript - 性能方面——canvas vs base URI vs image