繁体   English   中英

Python中的OpenCV2与inRange引发错误

[英]OpenCV2 in Python throwing error with inRange

因此,我看上去很努力,但找不到关于OpenCV错误的任何内容,而且绝对没有讨论可能的错误及其原因的文档。 我正在将OpenCV2与Python 2.7结合使用,试图通过网络摄像头实时跟踪彩色的泡泡球。 为此,我通过对摄像头中粉扑球显示的HSV值附近的最新图像进行阈值处理来获得彩球的中心。 不幸的是,这似乎并不总是可行,并且会引发一个非常神秘的错误:

cv2.error: .../matrix.cpp:235: error: (-215) step[dims-1] == (size_t)CV_ELEM_SIZE(flags) in function create

我不知道为什么会抛出这个。 产生它的代码是:

    def getColorCenter(self, imgHSV, lowerBound, upperBound, debugName = None):
        detectedImg = cv2.inRange(imgHSV, lowerBound, upperBound)

        if str(lowerBound) == str(self.GREEN_LOWER_BOUND):
            cv2.imshow(str(lowerBound) + "puffball", detectedImg)

        center = self.getCenterOfLargestBlob(detectedImg, debugName)
        return center

特别是detectedImg = cv2.inRange(imgHSV, lowerBound, upperBound)的行detectedImg = cv2.inRange(imgHSV, lowerBound, upperBound)

知道什么可以解决这个问题吗?

如果网络摄像头未检测到任何斑点,则可能导致该错误。

解决您的问题的更好方法是使用轮廓。 您可以遍历图像中的所有轮廓,然后选择面积最大的轮廓。 然后,您可以返回最大轮廓的质心。

detectedImg = cv2.inRange(imgHSV, lowerBound, upperBound)

# If there is a lot of noise in your image it would help to open and dilate

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))

detectedImg_open = cv2.morphologyEx(detectedImg, cv2.MORPH_OPEN, kernel)
detectedImg_dilate = cv2.dilate(detectedImg_open, kernel, iterations = 1)

现在找到轮廓:

_, contours, _ = cv2.findContours(detectedImg_dilate, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

按面积查找最大轮廓:

largest_contour_val = 0
largest_contour_pos = 0
for i in xrange(len(contours)):
    if cv2.contourArea(contours[i])>largest_contour_val:
        largest_contour_val = cv2.contourArea(contours[i])
        largest_contour_pos = i

现在,仅当存在至少一个轮廓时,我们才返回最大轮廓的质心:

if len(contours)!=0:

    # find centroid and return it
    M = cv2.moments(contours[largest_contour_pos])
    x = int(M['m10']/M['m00'])
    y = int(M['m01']/M['m00'])
    center = (x,y)
    return center

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM