maxLineGap

简介: maxLineGap “【5月更文挑战第11天】”

,使用 cv2.HoughLinesP 函数检测图像中的直线。该函数的返回值 lines 是一个二维数组,其中每一行代表检测到的一条直线。

lines = cv2.HoughLinesP(edges, 1, 1.0 * np.pi / 180, 230, minLineLength=180, maxLineGap=5)

参数说明:

  • edges:边缘检测后的图像。
  • 1:累加器的单元大小,表示每个单元的像素数。
  • 1.0 * np.pi / 180:角度的精度,这里设置为1度。
  • 230:累加器阈值,只有当累加器超过这个值时,才认为检测到直线。
  • minLineLength:直线的最小长度。
  • maxLineGap:直线之间的最大间隔。

返回值 lines 的结构:

  • lines 是一个形状为 (N, 4) 的二维数组,其中 N 是检测到的直线数量。
  • 每一行包含一条直线的两个端点的坐标 ((x1, y1), (x2, y2))

关于结果的解释:

  • print(lines):打印出所有检测到的直线信息。
  • print(type(lines)):确认 lines 是一个 numpy.ndarray 类型的对象。
  • print(len(lines)):打印出检测到的直线数量,即 lines 中的行数。
  • print(lines[0]):打印出第一条直线的端点坐标。

如果 len(lines) 的值是 9,这意味着检测到了 9 条直线。然而,需要注意的是,并非所有检测到的直线都是有意义的,有些可能是错误的检测或者是图像中的噪声导致的。通常,您可能需要进一步处理这些直线,比如通过可视化、去除重复直线或根据直线的方向、长度进行筛选等。

可视化直线:

您可以使用 cv2.line 函数将检测到的直线绘制到图像上,以便于观察:

img_with_lines = cv2.imread('1.jpg')
for i in range(len(lines)):
    rho, theta = lines[i][0]
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a * rho
    y0 = b * rho
    x1 = int(x0 + 1000 * (-b))
    y1 = int(y0 + 1000 * (a))
    x2 = int(x0 - 1000 * (-b))
    y2 = int(y0 - 1000 * (a))

    cv2.line(img_with_lines, (x1, y1), (x2, y2), (0, 0, 255), 1)

cv2.imshow("Lines", img_with_lines)
cv2.waitKey()
cv2.destroyAllWindows()
目录
相关文章
|
5天前
|
定位技术 计算机视觉
|
8月前
|
Arthas IDE Java
一种获取阻塞线程栈帧数据的思路
一种获取阻塞线程栈帧数据的思路
128 2
|
5天前
|
Ubuntu Docker 容器
Ubuntu 22.04.3 LTS_安装Docker
Ubuntu 22.04.3 LTS_安装Docker
49 1
|
5天前
|
消息中间件 存储 运维
Message Service
Message Service “【5月更文挑战第8天】”
50 6
|
5天前
|
SQL JSON Java
IntelliJ IDEA 15款 神级超级牛逼插件推荐
IntelliJ IDEA 15款 神级超级牛逼插件推荐
147 1
|
8月前
|
Arthas 测试技术
如何检测由synchronized或Lock引起的线程阻塞问题
如何检测由synchronized或Lock引起的线程阻塞问题
117 1
|
8月前
|
JavaScript
nodejs服务器的运行
nodejs服务器的运行
213 1
|
8月前
|
JavaScript
npm的安装与镜像设置
npm的安装与镜像设置
354 1
|
8月前
|
存储 Ubuntu 开发工具
容器镜像的制作2
本实验介绍了如何docker build的方式构建容器。
168 1