首页 文章

Python / OpenCV - 间歇性错误

提问于
浏览
0

我编写了一个程序,可以从usb摄像头捕获图像,并根据每帧中的颜色检测跟踪对象位置 . 间歇性的(这可能发生在1分钟,10分钟或半小时后)我收到错误消息:

OpenCV Error: Assertion failed (depth == CV_8U || depth == CV_16U || depth == CV_32F) in cv::cvtColor, file C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\color.cpp, line 7343
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile
    execfile(filename, namespace)
  File "C:\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 71, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)
  File "D:/file.py", line 371, in <module>
    hsv_frame = cv2.cvtColor(blur_frame, cv2.COLOR_BGR2HSV)
cv2.error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\color.cpp:7343: error: (-215) depth == CV_8U || depth == CV_16U || depth == CV_32F in function cv::cvtColor

我遵循的流程是:

使用相机捕获帧,cap = cv2.VideoCapture(1)/ cap.read()变换几何,cv2.warpPerspective高斯模糊滤镜,cv2.GaussianBlur BGR到HSV转换,cv2.cvtColor(blur_frame,cv2.COLOR_BGR2HSV)轮廓查找和分析,cv2.threshold

它有时完美无瑕 . 然后我突然收到停止程序的错误消息 . 我觉得奇怪的是,它发生在这个过程的后期 . 如果是由于相机驱动程序损坏,错误应该更早发生?

有什么想法可能导致这个?

编辑1:是否可以从持有框架的全局变量中抓取框架,而它是从流线程写入的?

编辑2:由于线程之间缺乏同步而出现问题 . 将捕获移动到处理循环,现在它完美无缺,并且速度几乎与单独线程中的速度相同......

1 回答

  • 0

    正如GPPK评论的那样,您的相机有时可能无法拍摄照片 . 这可能由于竞争条件,IO系统中的问题,高CPU负载等而发生 . 在openCV documentation中,您可以看到方法 retrieve 返回布尔值以及图像 .
    cv2.VideoCapture.retrieve([image[, channel]]) → retval, image
    捕获时,只需检查 retval 是否为True,如果不是,请尝试捕获另一帧 . 如果捕获重复失败,则与相机的连接中断 .

相关问题