Can't set frame width and height with [OpenCV] cv2.VideoCapture.set()
Solution 1
The idea is to resize the frame without having to worry about setting the default frame size. Instead of using cv2.VideoCapture().set()
, you can use cv2.resize()
to resize the original 1920x1080
frame into 320x180
. But this method does not maintain aspect ratio. If you wanted to maintain aspect ratio, you can use the imutils
library. The imutils.resize()
function resizes the frame and maintains aspect ratio. Change the width
parameter to your desired resolution
import cv2
import imutils
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
ret, frame = cap.read()
frame = imutils.resize(frame, width=320)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Solution 2
Finally I have found that solved this problem
When you try to set random resolution, opencv sets nearest resolution if that resolution is not available.
You can run below command to find out all the available resolutions of your webcam.
uvcdynctrl -f
And set those resolutions only. (my webcam resolutions: 1280x720, 640x480, 640x360)
vid.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
vid.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
Reference: https://techoverflow.net/2018/12/18/how-to-set-cv2-videocapture-image-size/
blinkThrice
Updated on May 28, 2020Comments
-
blinkThrice almost 4 years
I am trying to reduce the frame/window size of my video capture to
320x180
but I can't seem to do it. I am using a Windows Kinect for Xbox One and its connected to my pc using an adapter.I have tried setting the
cv2.CAP_PROP_FRAME_WIDTH
to 320 andcv2.CAP_PROP_FRAME_HEIGHT
to 180 but once I try and get the values it returns 1920 and 1080. I have also tried installing and reinstalling the Kinect SDK and drivers.import cv2 import numpy as np vid = cv2.VideoCapture(0) vid.set(cv2.CAP_PROP_FRAME_WIDTH, 320) vid.set(cv2.CAP_PROP_FRAME_HEIGHT, 180) vid.set(cv2.CAP_PROP_FPS, 25) print(vid.get(cv2.CAP_PROP_FPS)) print(vid.get(cv2.CAP_PROP_FRAME_WIDTH)) while True: ret, frame = vid.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Display the resulting frame cv2.imshow('frame', gray) if cv2.waitKey(1) & 0xFF == ord('q'): break vid.release() cv2.destroyAllWindows()
I would like help in knowing where the problem stems from and hopefully get a fix.
-
pentanol over 2 yearsThis does not work
-
ati ince almost 2 yearsnice solution. I am transferring cv image<-> qtlabel pixmap and it solved my need.