我正在使用Python OpenCV作为第一步涉及从网络摄像头捕获图像的项目;我试图通过使用capture = cv2.VideoCapture
和capture.read()
来自动执行此过程,但相机的视频模式激活及其随后的自我调整对于我最终想实现的速度来说太慢。直接获取摄像头截图的方法
是否有一个更直接的方法来自动捕捉与Python(和OpenCV)截图?如果不是,你有其他建议吗? 感谢
我正在使用Python OpenCV作为第一步涉及从网络摄像头捕获图像的项目;我试图通过使用capture = cv2.VideoCapture
和capture.read()
来自动执行此过程,但相机的视频模式激活及其随后的自我调整对于我最终想实现的速度来说太慢。直接获取摄像头截图的方法
是否有一个更直接的方法来自动捕捉与Python(和OpenCV)截图?如果不是,你有其他建议吗? 感谢
如果你希望你的相机截图功能是响应,你需要初始化相机捕捉这个功能之外。
在下面的代码段中,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
,则不需要此部分。
希望它有帮助!
基本上你需要做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)
当然
之前,您应该等待一段时间,如果不是你能救一个奇怪的黑屏(或只是第一件事相机了: - ))
我有同样的问题,但找不到更好的解决方案。 – arsho
如果我理解正确,你目前所做的是在屏幕截图功能中初始化视频捕捉? ('capture = cv2.VideoCapture',然后'capture.read()') –
没错,但我想知道是否有更直接的方式来访问相机画面,但我猜想初始化是需要的一步。 – Eggman