【OpenCV】59 二值图像分析—霍夫直线检测

59 二值图像分析—霍夫直线检测

代码

import cv2 as cv
import numpy as np

def canny_demo(image):
    t = 80
    canny_output = cv.Canny(image, t, t * 2)
    return canny_output

src = cv.imread("../images/sudoku.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)

binary = canny_demo(src)
cv.imshow("binary", binary)

lines = cv.HoughLines(binary, 1, np.pi / 180, 150, None, 0, 0)
if lines is not None:
    for i in range(0, len(lines)):
        rho = lines[i][0][0]
        theta = lines[i][0][1]
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a * rho
        y0 = b * rho
        pt1 = (int(x0 + 1000 * (-b)), int(y0 + 1000 * (a)))
        pt2 = (int(x0 - 1000 * (-b)), int(y0 - 1000 * (a)))
        cv.line(src, pt1, pt2, (0, 0, 255), 3, cv.LINE_AA)

# 显示
cv.imshow("hough line demo", src)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果

在这里插入图片描述

解释

图像霍夫变换是一种特别有用的图像变换,通过把图像的坐标从2D平面坐标系变换到极坐标空间,可以发现原来在平面坐标难以提取的几何特征信息(如:直线、圆等),图像的直线与圆检测就是典型的利用霍夫空间特性实现二值图像几何分析的例子。假设有如下的直线参数方程:
r = x*cos(theta) + y * sin(theta)
其中角度theta指r与X轴之间的夹角,r为到直线几何垂直距离。

OpenCV关于霍夫直线检测有两个API,我们首先分享第一个函数,它是提取到直线在霍夫空间得几何特征,然后输出直线得两个极坐标参数。根据这两个参数我们可以组合得到空间坐标直线。该API如下:

lines = cv.HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]])
  • Image 输入图像
  • Lines 输出直线
  • Rho 极坐标r得步长
  • Theta角度步长
  • Threshold累加器阈值
  • Srnstn多尺度霍夫变换时候需要得参数,经典霍夫变换不需要
  • min_theta 最小角度
  • max_theta最大角度

在这里插入图片描述


所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
霍夫直线检测(Hough Line Transform)是一种常用的像处理技术,用于检测像中的直线。OpenCV库中包含了对霍夫直线检测的支持。 在OpenCV中,使用`HoughLines`函数进行霍夫直线检测。函数的基本使用方法如下: ```python lines = cv2.HoughLines(image, rho, theta, threshold) ``` 参数说明: - `image`:输入的二值像,通常为边缘检测后的像。 - `rho`:表示ρ(rho)参数的精确度,一般取1。 - `theta`:表示θ(theta)参数(角度)的精确度,一般取π/180。 - `threshold`:用于筛选直线的阈值,只有当累加器中的值大于阈值时,才被认为是一条直线。 函数返回的是一个由直线参数组成的数组,每个直线参数是一个(rho, theta)对,表示检测到的一条直线。可以根据需要对返回的直线进行后续处理或绘制。 另外,OpenCV还提供了`HoughLinesP`函数,它可以直接返回直线在像上的起点和终点坐标,方便进行直线的绘制。 ```python lines = cv2.HoughLinesP(image, rho, theta, threshold, minLineLength, maxLineGap) ``` 除了上述参数外,`HoughLinesP`还包含两个额外的参数: - `minLineLength`:表示线段的最小长度,小于该长度的线段会被排除。 - `maxLineGap`:表示两条线段之间的最大间隔,超过该间隔的线段会被视为不同的线段。 希望这些信息能帮助到你进行霍夫直线检测!如有更多问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值