2017-05-04 158 views
0

我正在使用Python OpenCV作为第一步涉及从网络摄像头捕获图像的项目;我试图通过使用capture = cv2.VideoCapturecapture.read()来自动执行此过程,但相机的视频模式激活及其随后的自我调整对于我最终想实现的速度来说太慢。直接获取摄像头截图的方法

是否有一个更直接的方法来自动捕捉与Python(和OpenCV)截图?如果不是,你有其他建议吗? 感谢

+0

我有同样的问题,但找不到更好的解决方案。 – arsho

+0

如果我理解正确,你目前所做的是在屏幕截图功能中初始化视频捕捉? ('capture = cv2.VideoCapture',然后'capture.read()') –

+0

没错,但我想知道是否有更直接的方式来访问相机画面,但我猜想初始化是需要的一步。 – Eggman

回答

0

如果你希望你的相机截图功能是响应,你需要初始化相机捕捉这个功能之外

在下面的代码段中,screenshot功能通过按下Ç触发:

import cv2 

def screenshot(): 
    global cam 
    cv2.imshow("screenshot", cam.read()[1]) # shows the screenshot directly 
    #cv2.imwrite('screenshot.png',cam.read()[1]) # or saves it to disk 

if __name__ == '__main__': 

    cam = cv2.VideoCapture(0) # initializes video capture 

    while True: 
     ret, img = cam.read() 
     cv2.imshow("cameraFeed", img) # a window is needed as a context for key capturing (here, I display the camera feed, but there could be anything in the window) 
     ch = cv2.waitKey(5) 
     if ch == 27: 
      break 
     if ch == ord('c'): # calls screenshot function when 'c' is pressed 
      screenshot() 

    cv2.destroyAllWindows() 

为了澄清cameraFeed窗口只这里演示的目的(其中screenshot手动触发)。如果您的程序中自动调用screenshot,则不需要此部分。

希望它有帮助!

0

基本上你需要做3件事情:

#init the cam 
video_capture = cv2.VideoCapture(0) 
#get a frame from cam 
ret, frame = video_capture.read() 
#write that to disk 
cv2.imwrite('screenshot.png',frame) 
当然

之前,您应该等待一段时间,如果不是你能救一个奇怪的黑屏(或只是第一件事相机了: - ))