Python OpenCV(-215:断言失败)_函数';CVT颜色

Python OpenCV(-215:断言失败)_函数';CVT颜色,python,opencv,Python,Opencv,所以,基本上我正在用GoogleColab编写一个程序,它将使用python和opencv2通过网络摄像头检测人脸。 “我有Ubuntu 19.10,如果这有帮助的话” 此时,将出现一个断言错误 Traceback (most recent call last) <ipython-input-94-ca2ba51b9064> in <module>() 7 ret, frame = video_capture.read() 8 ---->

所以,基本上我正在用GoogleColab编写一个程序,它将使用python和opencv2通过网络摄像头检测人脸。 “我有Ubuntu 19.10,如果这有帮助的话”

此时,将出现一个断言错误

Traceback (most recent call last)
<ipython-input-94-ca2ba51b9064> in <module>()
      7   ret, frame = video_capture.read()
      8 
----> 9   gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

error: OpenCV(4.1.2) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
回溯(最近一次呼叫上次)
在()
7 ret,frame=video\u capture.read()
8.
---->9灰色=cv2.CVT颜色(边框,cv2.COLOR\u BGR2GRAY)
错误:OpenCV(4.1.2)/io/OpenCV/modules/imgproc/src/color.cpp:182:错误:(-215:断言失败)_函数“cvtColor”中的src.empty()
当我运行此代码时,没有任何东西在使用网络摄像头_src.empty()表示框架为空

cv2
无法从相机/文件/流中获取
frame
时,它不会显示错误,但会在
frame
中设置
None
,在
ret
中设置
False
,您必须检查其中一个值

if frame is not None: 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # ... other code ...
else:
    print("empty frame")
    exit(1)

顺便说一句:如果帧:你不能使用更短的
,因为当它从相机获取图像时,
frame
会获取
numpy.array()
,它会尝试分别检查每个单元格中的值,并显示警告,要求使用
.all()
.any()
-但
.all()
.any()
时,可能会出现错误


顺便说一句:有时
cv2
在查找haarcascades文件时遇到问题。还有一个特殊变量,它带有指向文件夹的路径
.xml
-
cv2.data.haarcascades
,您可能需要

faceCascade = cv2.CascadeClassifier( os.path.join(cv2.data.haarcascades, "haarcascade_frontalface_default.xml") )

哦,上帝。。。我刚刚意识到我在Google Colab虚拟环境中工作,这就是为什么它无法连接到我的本地摄像头。

这意味着你有空的
帧。当
cv2
无法从相机/文件/流中获取帧时,它不会显示错误,但会在
ret
中设置
None
,如果ret不是None,则必须使用
跳过代码或退出程序。当我编写
时,如果ret不是None,则会出现相同的错误。所以
ret
不是
None
,然后我写了
如果frame是None:print(“None”)
,它给了我
None
,现在我很困惑。我的错误-它在
frame
中给出
None
,在
ret
中给出
False
,好的,所以,如果frame不是None:
或者如果ret:
,我应该涂抹什么。我换了密码作为回答。
if ret:  # if ret is True:
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # ... other code ...
else:
    print("empty frame")
    exit(1)
if not ret: 
    print("empty frame")
    exit(1)

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# ... other code ...
if frame is None: 
    print("empty frame")
    exit(1)

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# ... other code ...
faceCascade = cv2.CascadeClassifier( os.path.join(cv2.data.haarcascades, "haarcascade_frontalface_default.xml") )