因此,我尝试使用opencv中的Harris角落检测来找到对象的角落。我应该得到5个确切的角,但是我得到6个角。似乎有问题。
function submitForm() {
if ($("input[type="text"]).val().match(regexp)) {
form.submit();
} else {
// display message
}
}
原始图片
所需的输出角点
多余的角落
6个角像素
答案 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]]
如您所见,第一点已删除。