当前位置: 首页 > 知识库问答 >
问题:

Python/OpenCV-间歇性错误

欧阳昊阳
2023-03-14

我已经编写了一个程序,从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。视频捕获(1)/cap。read()
  • 变换几何,cv2。透视图
  • 高斯模糊滤波器,cv2。高斯模糊
  • BGR到HSV转换,cv2。CVT彩色(模糊帧,cv2.COLOR\u BGR2HSV)
  • 轮廓发现和分析,cv2。门槛

有时,它工作得完美无缺。然后我突然收到错误信息,停止了程序。我认为这是奇怪的,它发生在这么晚的一步,在这个过程中。如果是由于摄像头驱动程序损坏,那么错误是否应该更早发生?

有什么想法可能是什么导致的吗?

编辑1:在从流线程写入帧时,是否可以从保存帧的全局变量中获取帧?

编辑2:由于线程之间缺乏同步,出现了问题。将捕获移动到处理循环,现在它工作得非常完美,速度几乎与在单独的线程中时相同...

共有2个答案

终波涛
2023-03-14

正如@GPPK评论的那样,很可能你的相机有时拍不到照片。这可能是由于竞争条件、IO系统中的问题、高CPU负载等造成的。在openCV留档中,您可以看到检索方法返回布尔值以及图像。

cv2.VideoCapture.retrieve([image[, channel]]) → retval, image

捕获时,只需检查Retval是否为True,如果不是,请尝试捕获另一个帧。

如果多次拍摄失败,则与相机的连接中断。

雍马鲁
2023-03-14

正如GPPK评论的那样,很可能您的相机有时无法拍摄照片。这可能是由于竞争条件、IO系统中的问题、高CPU负载等原因造成的。在openCV文档中,您可以看到方法retrieve返回布尔值以及图像
cv2。视频捕捉。检索([image[,channel]])→ retval,image
拍摄时,只需检查retval是否为真,如果不是真的,请尝试拍摄另一帧。如果多次拍摄失败,则与相机的连接中断。

 类似资料:
  • 我们有一个SSL问题,我是99%,这不是你通常的证书信任商店旋转木马。 我们有一个Weblogic服务器试图通过LDAPS与Active Directory建立SSL连接,底层SSL实现是JSSE。 有时,它是有效的。通常在重新启动Weblogic后的几个小时内。 之后,我们开始得到SSL握手错误,与SSL调试打开我们看到: [ACTIVE]ExecuteThread:'10'用于队列:'webl

  • 我们正在AWS的CoreOS上运行kubernetes 1.5.7。我们的kube dns映像版本是 gcr.io/google_containers/kubedns-amd64: 1.9gcr.io/google_containers/kube-dnsmasq-amd64: 1.4.1 我们传递给dnsmasq的参数是 我们在20个节点集群中每个节点运行1个kube dns pod。在过去的几个

  • PHP间歇性地报告荒谬的分配错误。 致命错误:第0行中未知的134217728字节的允许内存大小已用尽 (尝试分配4348209864字节) 它试图分配超过4GB的内存。什么哪里是?它试图分配到哪里? 我没有在PHP代码中显式分配任何内存,也没有使用除股票PHP调用以外的任何东西。我看到我的PHP文件中的最后一行原始HTML(在我退出PHP块之后)被发出并在加载的页面中,因此问题似乎没有出现在我的

  • 问题内容: 我有一个通过Apache https proxypass在Tomcat上运行的Java Spring Web应用程序,当它尝试访问安全的IBM Watson服务时间歇性地失败。Apache通过LetsEncrypt证书进行安全保护,该证书重定向到Tomcat端口8080。 环境: Java:jdk1.7.0_80 Solaris 10 Tomcat 8.0.33 Apache2.4.1

  • 我在Azure上使用botframework。当开始与机器人交互时,我会得到断断续续的身份验证错误。如果你只是忽略错误,机器人继续正常工作,你不会一直得到错误。 这是最内层的错误:操作返回了无效的状态代码“unauthorized”。错误发生在MessagesController+D__3.MoveNext方法中。

  • 我有一个用Java编写的REST API,在JBoss下运行。最近我们将JVM从1.6更新到1.7。这开始导致只有我们正在连接的Python客户端出现问题。间歇性地,Python客户端出现握手失败。我们编写了一个非常简单的测试来重现这个问题: 给出以下输出: 第67次调用在这次运行中失败了,但是每次测试运行失败的时间不同。 我们的其他客户端(Java、Groovy和Ruby)工作起来没有任何问题。