Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

opencv set camera resolution windows vrs linux

Questions that are variations of this occur, but not this error situation.

This codeworks on Linux, it Fails on windows10 OpenCV 3.4.2, 64bit -Python 3.6 - installed via "pip3 install opencv-python"

It fails on Windows with the error message below.

If I remove the 'cv2.set()' for the horz and virt size it works, without problem but the resolution is not what I want

My goal is to change from the default image size to the LARGER size.

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

This is the Python code

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()
like image 904
user3696153 Avatar asked Mar 02 '26 06:03

user3696153


2 Answers

I was able to work around this by switching to the DSHOW backend API:

cap = cv2.VideoCapture(cv2.CAP_DSHOW)
like image 158
brianpeiris Avatar answered Mar 04 '26 19:03

brianpeiris


Thanks to brianpeiris for the solution, I'm just documenting it here in a more formal way

The cv2.CAP_DSHOW is a flag passed as part of the open call, there are many others you can pass, and this CAP_DSHOW is Microsoft specific.

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
like image 30
user3696153 Avatar answered Mar 04 '26 18:03

user3696153



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!