我目前正在使用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)
答案 0 :(得分:0)
您收到的错误几乎肯定意味着您有一个空图像(或者混合输入图像的大小)。
OpenCV中的网络摄像头捕获通常以一个或几个黑/ emtpy图像(糟糕的驱动程序)开始。由于它太快,这就是为什么你没有注意到这一点。但是,如果要处理图像,这将对您的应用程序产生影响。因此,我建议您在继续计算之前检查图像。只需在capture.read()
行后添加:
if ret == True:
注意:确保(通过在控制台或其他内容中打印)仅在您开始捕获时才会发生这种情况。如果这种情况经常发生(来自网络摄像头的空帧),可能还有其他错误(或者可能是您的网络摄像头)。另请在另一台计算机上查看。