【发布时间】:2020-03-06 11:34:18
【问题描述】:
我想制作一个使用 OpenCV 显示我的实时网络摄像头的程序,并且每当我按下 SPACE 时它都会拍照。
我正在使用 python 3.6.4 和 OpenCV 4.1.1。这是一个程序,在 tensorflow 的帮助下,它会拍照,并识别数据库中是否有人在里面。这是我当前的代码:
cam = cv2.VideoCapture(0)
img_counter = 0
while True:
ret, frame = cam.read()
if not cam.isOpened():
raise IOError("Cannot use webcam")
elif cam.isOpened():
cv2.imshow('frame', frame)
if not ret:
break
if cv2.waitKey(1) == 27:
#ESC pressed
break
elif cv2.waitKey(1) == 32:
#SPACE pressed
img_name = 'students_{}.png'.format(img_counter)
cv2.imwrite(img_name, frame)
print(img_name + 'was captured')
img_counter += 1
cam.release()
cv2.destroyAllWindows()
当我运行它时,它会引发这个错误:
cv2.error: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:352: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
我现在的目标是让它显示网络摄像头、拍照并将其保存在项目的文件夹中。
有谁知道怎么回事? 或者 tensorflow 是否具有我不必使用 openCV 的功能? 非常感谢,加比
【问题讨论】:
-
检查
print(frame)- 可能会显示None,这意味着它无法从相机获取图像。 -
总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)放在有问题的(不是评论)中。还有其他有用的信息。
-
value
0inVideoCapture(0)通常表示笔记本内置摄像头。如果您使用外部摄像头,那么您可能必须使用不同的值,或者您可能必须使用 camare 的路径 - 即。在 LInux 上可以是/dev/video0、/dev/video1等。