我有一个USB摄像头,我知道它的分辨率是1920x1080。
当我使用opencv的VideoCapture将分辨率设置为1080x720时,方法如下
video_capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1080)
video_capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)本质上发生了什么?
它直接从相机缓冲区进行二次采样,还是读取整个图像并将大小调整为1080x720?
如果opencv子采样直接从相机缓冲区,那么应用这些设置将提高读取速度,对吗?
如果opencv读取整个图像并将大小调整为1080x720,那么应用这些设置将减少读取速度,对吗?
它应该属于什么样的情况?
发布于 2019-12-29 14:09:47
我尝试将分辨率设置为不同的值
import cv2
cap = cv2.VideoCapture(0)
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
for i in range(1, 2000):
cap.set(cv2.CAP_PROP_FRAME_WIDTH, int(i))
if w != cap.get(cv2.CAP_PROP_FRAME_WIDTH):
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
print(str(int(w)), str(int(h)))
cap.release()
cv2.destroyAllWindows()这是我得到的结果
160 120
320 240
640 480
848 480
960 540
1280 720因为我没有1920x1080选项,所以可以得出结论,只有当相机支持所需的分辨率时,才能使用cap.set属性。
请注意,调整大小的操作在OpenCV中实现得很好。因此,即使对于功率最低的计算机,如Raspberry Pi,与其他成像操作相比,调整大小的时间流逝也是可以忽略的。(例如,与高斯模糊不同,高斯模糊的计算时间在普通计算机中也可以忽略,但在RPi中该操作需要大量时间。)
https://stackoverflow.com/questions/59476078
复制相似问题