使用Python中的OpenCV2在inRang时抛出错误

2024-03-29 12:32:00 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我很努力,但是我找不到关于OpenCV错误的任何信息,也绝对没有讨论可能的错误及其原因的文档。我使用OpenCV2和Python2.7,尝试用网络摄像头实时跟踪彩色泡芙球。为了做到这一点,我通过对网络摄像头上的最新图像进行阈值化,得到一个彩色球的中心,该图像围绕着泡芙球出现的HSV值。不幸的是,这似乎并不总是有效的,并且抛出了一个非常神秘的错误:

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

我不知道它为什么要扔这个。产生它的代码是:

^{pr2}$

尤其是detectedImg = cv2.inRange(imgHSV, lowerBound, upperBound)行。在

你知道怎么解决这个问题吗?在


Tags: 文档图像网络信息错误原因阈值error
1条回答
网友
1楼 · 发布于 2024-03-29 12:32:00

如果网络摄像头没有检测到任何斑点,则可能会导致此错误。在

解决问题的更好方法是使用轮廓线。 你可以浏览图像中的所有轮廓,然后选择面积最大的一个。然后可以返回最大轮廓的质心。在

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)

现在找到轮廓:

^{pr2}$

按区域查找最大轮廓:

^{3}$

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

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

相关问题 更多 >