我想使用OpenCV从我的网络摄像头捕获并保存大量图像.这是我目前的代码:
import cv2 camera = cv2.VideoCapture(0) for i in range(10): return_value, image = camera.read() cv2.imwrite('opencv'+str(i)+'.png', image) del(camera)
这个问题是我不知道什么时候拍摄这些照片,所以很多照片都会模糊不清.我的问题是:有没有办法在点击键盘键上拍摄图像?
还有更好的方法来拍摄多个图像,而不是范围?
这是一个简单的程序,可以显示摄像机输入,cv2.namedWindow
并在您点击时拍摄快照SPACE
.如果你击中它也会退出ESC
.
import cv2 cam = cv2.VideoCapture(0) cv2.namedWindow("test") img_counter = 0 while True: ret, frame = cam.read() cv2.imshow("test", frame) if not ret: break k = cv2.waitKey(1) if k%256 == 27: # ESC pressed print("Escape hit, closing...") break elif k%256 == 32: # SPACE pressed img_name = "opencv_frame_{}.png".format(img_counter) cv2.imwrite(img_name, frame) print("{} written!".format(img_name)) img_counter += 1 cam.release() cv2.destroyAllWindows()
我认为这应该在很大程度上回答你的问题.如果有任何你不明白的行让我知道,我会添加评论.
如果每按一次SPACE
键需要抓取多个图像,则需要一个内循环或者只需要创建一个抓取一定数量图像的函数.
请注意,关键事件来自于cv2.namedWindow
它必须具有焦点.