python上的霍夫变换问题

问题描述

我想对这张图片应用霍夫变换:1

我使用的代码如下:

cdst = cv2.cvtColor(hull_img,cv2.COLOR_GRAY2BGR)
lines = cv2.houghlines(hull_img,1,np.pi / 180,200)

a,b,c = lines.shape
for i in range(a):
    rho = lines[i][0][0]
    theta = lines[i][0][1]
    a = math.cos(theta)
    b = math.sin(theta)
    x0,y0 = a*rho,b*rho
    pt1 = ( int(x0+1000*(-b)),int(y0+1000*(a)) )
    pt2 = ( int(x0-1000*(-b)),int(y0-1000*(a)) )
    cv2.line(cdst,pt1,pt2,(0,255),2,cv2.LINE_AA)

(其中 hull_img 1 是我附加的第一张图片)。 但结果是:2

为什么线路断了?为什么没有找到所有的行?难道我做错了什么?我应该更改代码吗?

如果有人能帮助我,我将不胜感激! 谢谢

解决方法

我有同样的问题,我按照你的建议 @fmw42 在 hough 转换之前添加了这部分代码:

th3 =cv2.adaptiveThreshold(edged,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)

contours,hierarchy = cv2.findContours(th3,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
maxArea = 0
best = None
for contour in contours:
    area = cv2.contourArea(contour)
    if area > maxArea :
        maxArea= area
        best = contour

rect = cv2.minAreaRect(best)
box = cv2.boxPoints(rect)
box=order_points(box)
coordinates = box.tolist()

perimeter = cv2.arcLength(best,True)
epsilon = 0.01*cv2.arcLength(best,True)
approx = cv2.approxPolyDP(best,epsilon,True)

for cnt in contours:
    hull= cv2.convexHull(cnt)
    hull_img=cv2.drawContours(edged,[hull],(255,255),5)

似乎有所改善,但在不同类型的数字上尝试并不能完全解决问题。在某些图像中,Hough 变换找到的线条与多边形的轮廓不完全一致。