如何正确使用cv2.pointPolyginTest()和cv2.findcontours()?

时间:2016-04-07 16:33:38

标签: python opencv

我想使用cv2.pointPolygonTest来检查点是否位于轮廓内部或外部,但我无法弄清楚它为什么不起作用。

这是我获得轮廓的方式:

img_name = a295121c-f893-43f5-8d00-6bfddbc19658.jpg"
im = cv2.imread(img_name)
im_gray = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)

ret, thresh = cv2.threshold(im_gray, 10, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_TC89_L1)

这就是我检查点是在检测到的物体内部还是外部的方法。

    x1 = cv2.pointPolygonTest(contours[0], (x, y), False)

在这个阈值图像上,它可以正常工作:

test1

(x,y)在对象

中时,

x1被正确计算

np.shape(contours)等于(1, 241, 1, 2)

但是在这张图片上:

enter image description here

所有点都计算为外部

np.shape(contours)等于(11,)

我想我没有以正确的方式使用轮廓,但我无法弄清楚应该将轮廓的哪个维度传递给cv2.pointPolygonTest()

1 个答案:

答案 0 :(得分:1)

我想知道你测试这一点的代码是否只有这个:

 x1 = cv2.pointPolygonTest(contours[0], (x, y), False)

在此代码中,该功能仅测试第一个轮廓。也许在第二张图片中有多个轮廓,请尝试使用循环。