我在树莓派上使用OpenCV并使用Python构建。尝试制作一个简单的对象跟踪器,该对象跟踪器使用颜色通过阈值化图像并找到轮廓以定位质心来找到对象。当我使用以下代码时:

image=frame.array
imgThresholded=cv2.inRange(image,lower,upper)
_,contours,_=cv2.findContours(imgThresholded,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnt=contours[0]
Moments = cv2.moments(cnt)
Area = cv2.contourArea(cnt)

我收到以下错误。
Traceback (most recent call last):
 File "realtime.py", line 122, in <module>
  cnt=contours[0]
IndexError: list index out of range

我尝试了其他一些设置,但得到相同的错误,或者
ValueError: too many values to unpack

我正在使用PiCamera。对获得质心位置有任何建议吗?

谢谢

ž

最佳答案

错误1:

Traceback (most recent call last):
 File "realtime.py", line 122, in <module>
  cnt=contours[0]
IndexError: list index out of range

简单地说,cv2.findContours()方法在给定图像中未找到任何轮廓,因此始终建议在访问轮廓之前进行完整性检查,如下所示:
if len(contours) > 0:
    # Processing here.
else:
    print "Sorry No contour Found."

错误2
ValueError: too many values to unpack

由于_,contours,_ = cv2.findContours会引发此错误,因为cv2.findContours仅返回2个值,轮廓和层次结构,因此很显然,当您尝试从cv2.findContours返回的2个元素元组中解压缩3个值时,会引发上述错误。

另外,cv2.findContours会在适当位置更改输入垫,因此建议将cv2.findContours称为:
contours, hierarchy = cv2.findContours(imgThresholded.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
if len(contours) > 0:
    # Processing here.
else:
    print "Sorry No contour Found."

关于python - 在OpenCV中使用Python中的findContours,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36098241/

10-12 07:25