使用opencv捕获单张图片

a s*_*ich 9 python opencv image

我已经看到了几个关于使用python和opencv从网络摄像头流捕获帧的事情,但是如何使用python和opencv以指定的分辨率捕获一张图片?

aks*_*pal 8

您可以使用VideoCaptureOpenCV的方法捕获单个帧。

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()
Run Code Online (Sandbox Code Playgroud)

稍后您可以使用PIL轻松修改分辨率。


med*_*duz 3

使用 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)
Run Code Online (Sandbox Code Playgroud)

但不知道如何关闭相机。

使用上述代码的 ipython 会话示例:

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
Run Code Online (Sandbox Code Playgroud)