我只是试图制作简单的计算机视觉代码,该代码是使用python 3.6.6和openCV4.1.0从某个网站复制的,但是出现错误,这是我的错吗?
在每个“ cv2.imshow”中总会有一些错误
import cv2
cam = cv2.VideoCapture(1)
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()
它应该在笔记本电脑上编译为网络摄像头视图。 但这就是我得到的:
Exception has occurred: error
OpenCV(4.1.0) ../modules/highgui/src/window.cpp:352: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'
答案 0 :(得分:2)
这里的关键是要记住,每当在cv2.imshow()
周期内执行while True
操作时,都必须使用以下结构:
while True:
r, f = cam.read()
if r:
cv2.imshow("f", f)
if cv2.waitkey(1) & 0xff == ord('q'):
break
然后,您可以围绕此基本结构构建所有应用程序逻辑。
答案 1 :(得分:0)
这部分错误
size.width> 0 && size.height> 0
告诉您图像的宽度或高度为零。这意味着Output
无效,因此无法显示。在显示之前,请检查您的frame
是否有效。
好事是frame
已经告诉您读取是否成功,就像可以在documentation中读取的内容一样(cam.read()
等于您的cap
):< / p>
cap.read()返回布尔值(True / False)。如果正确读取框架,则它 将为真。因此,您可以通过检查此返回值来检查视频的结尾。
实际阅读和显示应如下所示:
cam
使用您的代码的完整示例:
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True: # frame is valid
# show the frame
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
如果所有帧都无效(视频设备不起作用),它将打印
“框架无效”
始终向您显示出问题。
我调整了import cv2
cam = cv2.VideoCapture(0) # adjusted to the first device '0'
img_counter = 0
while(True):
ret, frame = cam.read()
if ret: # frame is valid
# show the frame
cv2.imshow('frame',frame)
key = cv2.waitKey(1)
if key & 0xFF == ord('s'): # s for saving
print("S hit, saving...")
img_name = "opencv_frame_{}.png".format(img_counter)
cv2.imwrite(img_name, frame)
print("{} written!".format(img_name))
img_counter += 1
if key & 0xFF == ord('q'): # q for quitting
print("Q hit, closing...")
break
else:
print("Frame not valid")
cam.release()
cv2.destroyAllWindows()
的参数以使用系统的第一个视频设备(计数从0开始而不是1)。
该示例使用“ s”保存并使用“ q”退出。