Lnton羚通视频分析算法平台OpenCV-Python 教程 Hough直线变换
  bhI5HKfMRQFj 2023年11月02日 33 0

OpenCV Python Hough直线变换

霍夫直线变换(Hough Transform)是一种在图像中检测直线的技术。它可以帮助我们从图像中鲜明地检测出直线段,并且对于噪声和不完整的线段也有较好的鲁棒性。

霍夫直线变换的基本思想是将直线表示为参数空间中的曲线,通过统计参数空间中的交点来检测直线。

以下是霍夫直线变换的基本步骤:

边缘检测:

对输入图像进行边缘检测操作,例如使用Canny算子。

得到二值化的边缘图像,其中边缘像素为非零值,非边缘像素为零值。

构建霍夫空间:

定义霍夫空间,在二维情况下,霍夫空间通常由两个参数表示,如极坐标系下的角度和距离。

对每个边缘像素,在霍夫空间中遍历所有可能的直线,并将对应的霍夫空间中的计数器加一。

检测直线:

根据霍夫空间中的计数器值,找到具有足够高投票数量的参数组合,这些组合对应于图像中的直线。

可以通过设定阈值来控制检测到的直线数量。

输出直线:

将检测到的直线参数转换回图像坐标空间,得到检测到的直线的端点。

import cv2
import numpy as np

# 读入图像
img = cv2.imread('assets/sudoku.png')

# 灰度化
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 边缘检测
edges = cv2.Canny(gray, threshold1=50, threshold2=150, apertureSize = 3)

# 直线检测
lines = cv2.HoughLines(edges, rho=1, theta=np.pi/180, threshold=150 )


for line in lines:
    rho, theta = line[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,(x1,y1),(x2,y2),(0,0,255),2)

cv2.imshow("line", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Lnton羚通视频分析算法平台OpenCV-Python 教程 Hough直线变换_边缘检测

Lnton 羚通霍夫直线变换广泛应用于图像处理和计算机视觉领域,特别是在直线检测、图像分析、图像配准和边缘检测等任务中。

在实际应用中,OpenCV 是一个常用的计算机视觉库,提供了霍夫直线变换的实现方法和函数。您可以使用 OpenCV 中的 cv2.HoughLines() 函数来进行霍夫直线变换的计算和处理。

Lnton羚通视频分析算法平台OpenCV-Python 教程 Hough直线变换_OpenCV_02


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
bhI5HKfMRQFj