Capture solo pictures with opencv

I saw several things about capturing frames from a webcam stream using python and opencv. But how do you capture only one image with a given resolution using python and opencv?

+7
source share
3 answers

Use SetCaptureProperty:

import cv capture = cv.CaptureFromCAM(0) cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT, my_height) cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH, my_width) cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FORMAT, cv.IPL_DEPTH_32F) img = cv.QueryFrame(capture) 

I don’t know how to close the camera.

An example ipython session with the above code:

 In [1]: import cv In [2]: capture = cv.CaptureFromCAM(0) In [7]: img = cv.QueryFrame(capture) In [8]: print img.height, img.width 480 640 In [9]: cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT, 480/2) Out[9]: 1 In [10]: cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH, 640/2) Out[10]: 1 In [11]: img = cv.QueryFrame(capture) In [12]: print img.height, img.width 240 320 
+3
source

You can capture one frame using the VideoCapture OpenCV method.

 import numpy as np import cv2 cap = cv2.VideoCapture(0) # video capture source camera (Here webcam of laptop) ret,frame = cap.read() # return a single frame in variable `frame` while(True): cv2.imshow('img1',frame) #display the captured image if cv2.waitKey(1) & 0xFF == ord('y'): #save on pressing 'y' cv2.imwrite('images/c1.png',frame) cv2.destroyAllWindows() break cap.release() 

Later, you can easily change the resolution using PIL .

+1
source
 import cv2 cap = cv2.VideoCapture(0) cap.set(3,640) #width=640 cap.set(4,480) #height=480 if cap.isOpened(): _,frame = cap.read() cap.release() #releasing camera immediately after capturing picture if _ and frame is not None: cv2.imwrite('img.jpg', frame) cv2.imwrite(name, frame) 
0
source

All Articles