函数'cvtColor中的OpenCV(-215:断言失败)!_src.empty()

时间:2020-03-05 17:58:50

标签: python opencv

因此,基本上,我正在Google Colab中编写一个程序,该程序将使用python和opencv2通过网络摄像头检测面部。 “如果有帮助,我有Ubuntu 19.10”

import cv2
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

video_capture = cv2.VideoCapture(0)

while True:
  ret, frame = video_capture.read()

  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

这时,出现断言错误

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'

我在运行此代码时没有使用网络摄像头

2 个答案:

答案 0 :(得分:4)

!_src.empty()表示您有空的frame

cv2无法从摄像机/文件/流中获取frame时,它不会显示错误,但会在None和{{1}中设置frame } False中的}-您必须检查以下值之一

ret

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

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 ... ,因为当它从相机获取图像时,if frame:得到frame会尝试分别检查每个单元格中的值,并显示警告使用numpy.array().all()-但.any().all().any()frame可能会出错。


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

cv2.data.haarcascades

答案 1 :(得分:0)

哦,天哪!我刚刚意识到我正在Google Colab虚拟环境中工作,这就是为什么它无法连接到本地摄像机的原因。