I try to change video resolution (with mp4!) (to 800x600) in this way : but its doesn't work, when I use cap.get(3) and (4), its return every time defualt 1280x720!
import cv2
cap = cv2.VideoCapture('file')
while(cap.isOpened()):
cv2.waitKey(10)
ret, frame = cap.read()
cap.set(3, 800)
cap.set(4, 600)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA)
print cap.get(3) # return default 1280
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
What I'm doing wrong?
I tried -
cv2.resizeWindow("ssss", 300, 300),
and
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
no effect !
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
cv2.waitKey(10)
ret, frame = cap.read()
cap.set(3, 800)
cap.set(4, 600)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA)
print cap.get(3) # return default 1280
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
This your code works with webcame, not with file
for a video file, you can resize the window
cv2.resizeWindow(winname, width, height)
for that first define window with name and resize it
example
cv2.namedWindow("frame", 0);
cv2.resizeWindow("frame", 800,600);
for Detail resize window
I think there are a few things in your code that might need attention.
As described in the OpenCV documentation for VideoCapture
, if you want to access your default WebCam, you'd need to initialise the class as follows:
cap = cv2.VideoCapture('file')
If you are trying to then change the resolution of the camera, I'd suggest to move the two set
lines right below the initialisation of cap
and only perform it once - not each time you read in the frame. You can also use constants to access the right attributes:
cap = cv2.VideoCapture('file')
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
# Your while loop and the rest of the code...
If you are trying to read the frame from a file and want to change it's resolution, you'd probably want to use the resize
method as described here. This would need to be done inside the loop, right after you read in the frame. It could be something like:
resize(ret, ret, Size(800, 600), 0, 0, INTER_CUBIC);
I hope this helps.
cap.set()
has no effect below resolutions of 640,480
(at least for my macbook pro)
You can increase the resolution, but for example setting it to 300,300
has no effect.
As for my experience you ned to call resize()
on the frame after you read()
it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With