首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python OpenCV HoughLinesP不准确的直线检测

Python OpenCV HoughLinesP不准确的直线检测
EN

Stack Overflow用户
提问于 2019-09-16 13:29:21
回答 2查看 478关注 0票数 2

考虑图像中的三个点A,B,C。

下面是它们在300x300大小图像中的坐标。

我试图使用下面的HoughLinesP代码检测并绘制一条通过这三个点连接起来的线。

代码语言:javascript
复制
import cv2
import numpy as np

img = cv2.imread('test.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #Convert img to grayscale 
lines = cv2.HoughLinesP(img, rho=1, theta=np.pi/180, threshold=1, minLineLength=5, maxLineGap=10)
print(lines)

for line in lines:
    x1, y1, x2, y2 = line[0]
    cv2.line(img, (x1, y1), (x2, y2), 255, 1)
cv2.imshow("result", img)

但是它检测到一条只穿过B和C的线,为什么会这样呢?

代码语言:javascript
复制
Output:
[[[110 100 120 100]]]

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-19 13:19:41

  • 增加累加器的分辨率,为rho和θ提供更小的值。
  • 将累加器的阈值设置为最小2。
代码语言:javascript
复制
lines = cv2.HoughLinesP(img, rho=0.1, theta=np.pi/180 * 0.1, threshold=2, minLineLength=5, maxLineGap=10)

票数 0
EN

Stack Overflow用户

发布于 2019-09-17 01:07:01

cv2.HoughLinesP()主要用于检测一条直线,而不是真正用于绘图。考虑到你的三点,你还可以尝试一些其他的选择。第一种方法是通过查找最左边和最右边的点来过滤点,然后用cv2.line()绘制直线。另一种方法是找到所有的点,然后使用cv2.fillPoly()。第三种方法是使用cv2.polylines()

代码语言:javascript
复制
import cv2
import numpy as np

image = cv2.imread('1.png')
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
coords = np.column_stack(np.where(gray > 0))
coords = np.rot90(coords, 2)
cv2.fillPoly(image, [coords], (36,255,12)) # or
# cv2.polylines(image, [coords], 1, (36,255,12))

cv2.imshow('image', image)
cv2.imwrite('image.png', image)
cv2.waitKey()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57957940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档