我经历了许多类似的话题,但是我的代码没有找到解决方案。首先,我只想运行我的网络摄像头,看看照片。
import numpy as np
import cv2
cap = cv2.VideoCapture(1)
while True:
re,img=cap.read()
cv2.imshow("video output", img)
k = cv2.waitKey(10)&0xFF
if k==27:
break
cap.release()
cv2.destroyAllWindows()
我也试过这样做:
if img is not None:
我仍然会发现这个错误:
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow
我不得不说,我没有使用我的笔记本摄像头,所以它的id不是0,但它应该是1。我读到了类似于c++:frame=cvQueryFrame(capture); if (frame.empty()) break;
之类的解决方案,但是如何在Python中实现呢?我不认为这会解决我的问题?有谁有解决办法吗?
诚挚的问候
发布于 2017-03-30 08:12:54
根据OpenCV文档
cap.read()返回bool (真/假)。如果框架被正确读取,它将是真实的。 ..。 有时,cap可能没有初始化捕获。在这种情况下,此代码显示错误。您可以检查它是否由cap.isOpened()方法初始化。如果是真的,好吧。否则,使用cap.open()打开它。
因此,您的代码变成:
import numpy as np
import cv2
device = 1
cap = cv2.VideoCapture(device)
# if capture failed to open, try again
if not cap.isOpened():
cap.open(device)
# only attempt to read if it is opened
if cap.isOpened:
while True:
re, img = cap.read()
# Only display the image if it is not empty
if re:
cv2.imshow("video output", img)
# if it is empty abort
else:
print "Error reading capture device"
break
k = cv2.waitKey(10) & 0xFF
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
else:
print "Failed to open capture device"
如果仍然有错误,请尝试将设备更改为-1、0或2。否则,可能是与OpenCV无关的问题,例如驱动程序问题。
https://stackoverflow.com/questions/43095625
复制相似问题