Python opencv设置摄像机分辨率windows vrs linux

Python opencv设置摄像机分辨率windows vrs linux,python,opencv,image-resizing,Python,Opencv,Image Resizing,会出现这种情况的变体问题,但不会出现这种错误情况 此代码在Linux上工作,在windows10 OpenCV 3.4.2上失败,64位-Python 3.6-通过“pip3安装OpenCV Python”安装 它在Windows上失败,错误消息如下 如果我删除horz和virt大小的“cv2.set()”,它会工作,没有问题,但分辨率不是我想要的 我的目标是将默认图像大小更改为更大的大小 v=3.4.2 Camera H=480, W=640 Camera H=480, W=640 [ WAR

会出现这种情况的变体问题,但不会出现这种错误情况

此代码在Linux上工作,在windows10 OpenCV 3.4.2上失败,64位-Python 3.6-通过“pip3安装OpenCV Python”安装

它在Windows上失败,错误消息如下

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

我的目标是将默认图像大小更改为更大的大小

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()

我可以通过切换到DSHOW后端API来解决这个问题:

cap = cv2.VideoCapture(cv2.CAP_DSHOW)

多亏了brianpeiris的解决方案,我才以一种更正式的方式在这里记录它

cv2.CAP_DSHOW是作为open调用的一部分传递的标志,您可以传递许多其他标志,并且此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

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

videoSourceIndex = 1
cap = cv2.VideoCapture(cv2.CAP_DSHOW + videoSourceIndex)

谢谢-这就是解决方案-很明显,cv2.CAP_DSHOW是一个附加值。如果要打开摄影机1,请执行以下操作:(cv2.CAP\u DSHOW+1)