【问题标题】:Python OpenCV: inRange() stopped working without changePython OpenCV:inRange()停止工作而没有改变
【发布时间】:2017-04-01 10:20:40
【问题描述】:

我目前正在使用 Raspberry Pi 3 Model B 对橙色球进行实时对象检测。下面的代码应该采取一帧,然后使用 cv2.inRange() 函数,使用 RGB (BGR) 过滤掉图像)。然后我应用拨号和腐蚀来消除噪音。然后我找到轮廓并绘制它们。这段代码一直有效。但是,当我今天运行它而不更改它时,出现以下错误:

 Traceback (most recent call last):
 File "/home/pi/Desktop/maincode.py", line 12, in <module>
   mask = cv2.inRange(frame, lower, upper)
error: /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/core/src/arithm.cpp:2701: error: (-209) The lower bounary is neither an array of the same size and same type as src, nor a scalar in function inRange

任何帮助都会非常棒,因为我是 openCV 的新手,花了很多时间编写这个程序,而且我在 5 天内完成了机器人竞赛。

提前谢谢你

            import cv2
            import cv2.cv as cv
            import numpy as np


            capture = cv2.VideoCapture(0)
            while capture.isOpened:
                    ret, frame = capture.read()
                    im = frame
                    lower = np.array([0, 100 ,150], dtype = 'uint8')
                    upper = np.array([10,180,255], dtype = 'uint8')
                    mask = cv2.inRange(frame, lower, upper)
                    eroded = cv2.erode(mask, np.ones((7, 7)))
                    dilated = cv2.dilate(eroded, np.ones((7, 7)))
                    contours, hierarchy =   cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

                    cv2.drawContours(im,contours,-1,(0,255,0),3)
                    cv2.imshow('colors',im)
                    cv2.waitKey(1)

【问题讨论】:

  • 您确定您在mask = cv2.inRange(frame, lower, upper) 中输入的框架不是空的吗?尝试在此语句之前打印frame.shape

标签: python opencv object-detection


【解决方案1】:

您收到的错误几乎可以肯定意味着您有一个空图像(或者您混淆了输入图像的大小)。

OpenCV 中的网络摄像头捕获通常以一个或几个黑色/空图像(蹩脚的驱动程序)开始。由于它走得太快,这就是为什么你没有注意到这一点。但是,如果您要处理图像,这将对您的应用程序产生影响。因此,我建议您在继续计算之前检查图像。只需在您的 capture.read() 行之后添加:

if ret == True:

注意:确保(通过在控制台中打印或其他方式)这仅在您开始捕获时发生。如果这种情况经常发生(网络摄像头中的空帧),可能还有其他问题(或者可能与您的网络摄像头有关)。也可以在另一台电脑上查看。

【讨论】:

  • 我希望这能解决您的问题!如果问题仅发生在第一帧,请不要担心。我也有多个网络摄像头。如果以后仍然发生,则确实可能是硬件相关问题。确保 Pi 获得足够的电量。还可以尝试使用另一个网络摄像头或另一台计算机上的原始网络摄像头对其进行测试。看看问题是否仍然存在。祝你的比赛好运!另外,如果此答案解决了您的问题,请不要忘记接受它作为答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
相关资源
最近更新 更多