opencv设置相机分辨率windows vs linux

问题描述 投票:1回答:3

出现这种变化的问题,但不是这种错误情况。

Linux上的这个代码,它在Windows10 OpenCV 3.4.2,64bit -Python 3.6上失败 - 通过“pip3 install opencv-python”安装

它在Windows上失败,并显示以下错误消息。

如果我删除'cv2.set()'为horz和virt大小它工作,没有问题,但分辨率不是我想要的

我的目标是从默认图像大小更改为LARGER大小。

v=3.4.2
Camera H=480, W=640
Camera H=480, W=640
[ WARN:0] videoio(MSMF): OnReadSample() is called with error status: -1072875855
[ WARN:0] videoio(MSMF): async ReadSample() call is failed with error status: -1072875855
[ WARN:1] videoio(MSMF): can't grab frame. Error: -1072875855
[ WARN:1] videoio(MSMF): can't grab frame. Error: -2147483638

这是Python代码

import cv2
print("v=%s" % cv2.__version__)
cap = cv2.VideoCapture(0, cv2.)
h = cap.get( cv2.CAP_PROP_FRAME_HEIGHT )
w = cap.get( cv2.CAP_PROP_FRAME_WIDTH )
print("Camera H=%d, W=%d" % (h,w) )
# If I remove these two lines it works but is stuck at 640x480
cap.set( cv2.CAP_PROP_FRAME_HEIGHT, 10000 )
cap.set( cv2.CAP_PROP_FRAME_WIDTH, 10000 )
h = cap.get( cv2.CAP_PROP_FRAME_HEIGHT )
w = cap.get( cv2.CAP_PROP_FRAME_WIDTH )
print("Camera H=%d, W=%d" % (h,w) )

while(True):
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    ret, frame = cap.read()
    if ret:
        cv2.imshow('frame',frame)

cap.release()
cv2.destroyAllWindows()
python opencv image-resizing
3个回答
4
投票

通过切换到DSHOW后端API,我能够解决这个问题:

cap = cv2.VideoCapture(cv2.CAP_DSHOW)

1
投票

感谢brianpeiris的解决方案,我只是在这里以更正式的方式记录它

cv2.CAP_DSHOW是作为公开调用的一部分传递的标志,还有许多其他可以传递的标志,并且此CAP_DSHOW是Microsoft特定的。

import cv2

camera_number = 0

c = cv2.VideoCapture( camera_number + cv2.CAP_DSHOW)
# this picks the LARGEST image possible
c.set( cv2.CAP_PROP_FRAME_HEIGHT, 10000 )
c.set( cv2.CAP_PROP_FRAME_WIDTH, 10000 )

while True:
    a,f = c.read()
    if not a:
         continue
    cv2.imshow( "it-works", f )
    k=cv2.waitKey(10)
    # press q to quit.
    if k == ord('q'):
       break

0
投票

为了能够选择源索引,this comment中的答案非常有效。

videoSourceIndex = 1
cap = cv2.VideoCapture(cv2.CAP_DSHOW + videoSourceIndex)
© www.soinside.com 2019 - 2024. All rights reserved.