我想使用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)
在这个阈值图像上,它可以正常工作:
当(x,y)
在对象中时,x1被正确计算
np.shape(contours)
等于(1, 241, 1, 2)
但是在这张图片上:
所有点都计算为外部
np.shape(contours)
等于(11,)
我想我没有以正确的方式使用轮廓,但我无法弄清楚应该将轮廓的哪个维度传递给cv2.pointPolygonTest()
答案 0 :(得分:1)
我想知道你测试这一点的代码是否只有这个:
x1 = cv2.pointPolygonTest(contours[0], (x, y), False)
在此代码中,该功能仅测试第一个轮廓。也许在第二张图片中有多个轮廓,请尝试使用循环。