【问题标题】:Problem with hough transformation on pythonpython上的霍夫变换问题
【发布时间】:2021-07-17 02:22:30
【问题描述】:

我想对该图像应用霍夫变换: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, 0, 255), 2, cv2.LINE_AA)

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

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

如果有人可以帮助我,我将非常感激! 谢谢

【问题讨论】:

  • 霍夫变换在图像中找到直线。您的图像没有直线。它们有点弯曲,所以你会得到很多线段。尝试在阈值处理后获取轮廓。然后使用 cv2.approxPolyDP() 将顶点数减少到 4 个。然后简单地从一个顶点画线到另一个顶点。

标签: python opencv hough-transform convex-hull canny-operator


【解决方案1】:

我也有同样的问题,我听从了@fmw42 的建议,在霍夫变换之前添加了这部分代码:

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],0,(255,255,255),5)

似乎有所改善,但在不同类型的人物上尝试并不能完全解决问题。在某些图像中,通过霍夫变换找到的线条并不完全符合多边形的轮廓。

【讨论】:

  • 我没有说做霍夫变换。我说在做顶点缩减之后简单地画线。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 2014-06-17
相关资源
最近更新 更多