我试图在图像中找到对象的轮廓。应用Canny边缘检测后,我使用Hough变换来查找线条(假设对象只有直线)。我故意使用一个小门槛,所以我可以得到很多候选人,并选择最合适的。例如:
显然,这已经足够了。目前,我使用以下代码,该代码保留了每个行集群中检测到的第一行。
n2 = 0
strong_lines = np.zeros([10000,1,2])
for n1 in range(0,len(lines)):
for rho,theta in lines[n1]:
if n1 == 0:
strong_lines[n2] = lines[n1]
n2 = n2 + 1
else:
closeness_rho = np.isclose(rho,strong_lines[0:n2,0,0], atol = 50)
closeness_theta = np.isclose(theta,strong_lines[0:n2,0,1], atol = np.pi/18)
closeness = np.all([closeness_rho,closeness_theta], axis=0)
if not any(closeness):
strong_lines[n2] = lines[n1]
n2 = n2 + 1
如您所见,保留的线条不是最合适的线条,因为它只保留检测到的第一条线并抛弃附近的线条。
我在想的是,我不想保留检测到的第一行,而是比较此群集中每一行的Hough Transform 的投票,而保留该行的行大多数选票。
可悲的是,OpenCV中的Hough Transform功能并不能提供每行的精确投票。有什么方法可以解决这个问题,或者你对此有什么更好的认识?非常感谢你:))