如何使用OpenCV查找对象的角?

时间:2019-03-07 08:30:23

标签: python opencv

因此,我尝试使用opencv中的Harris角落检测来找到对象的角落。我应该得到5个确切的角,但是我得到6个角。似乎有问题。

function submitForm() {
     if ($("input[type="text"]).val().match(regexp)) {
            form.submit();
     } else {
            // display message
     }
}

原始图片

所需的输出角点

.

多余的角落

6个角像素

.

1 个答案:

答案 0 :(得分:2)

您的问题在这一行:

ret, labels, stats, centroids = cv2.connectedComponentsWithStats(dst)

您假设所有的质心/标签都针对每个角...但是实际上documentation中有一个针对背景(标签0):

  每个标签(包括背景标签)的

质心输出。   质心通过质心(label,0)访问x和   y的质心(label,1)。数据类型为CV_64F。

还有:

  

返回N,即标签[0,N-1]的总数,其中0代表   背景标签。

现在,知道了这一点,解决方案很简单,只需替换此指令即可:

corners = cv2.cornerSubPix(gray,np.float32(centroids),(5,5), 
          (-1,-1),criteria)

具有:

corners = cv2.cornerSubPix(gray,np.float32(centroids[1:]),(5,5), 
          (-1,-1),criteria)

请注意[1:]中的centroids。这将为您提供以下几点:

[[223 121]
 [153 191]
 [290 194]
 [152 275]
 [287 277]]

如您所见,第一点已删除。