美文网首页
18、直线检测

18、直线检测

作者: BigBigGuy | 来源:发表于2019-01-07 22:20 被阅读0次

霍夫直线变化

image.png

一、cv.HoughLines (不常用)

def line_detection(image):
    '''
        霍夫直线检测:
            1、边缘检测
            2、找出每一个可以可疑直线的点
    '''
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    edge = cv.Canny(gray, 50, 150, apertureSize=3)

    '''
        cv.HoughLines(不常用):画出两点之间的一条直线,非线段
            rho:半径步长
            theta:角度,每次偏转一度
            threshold:自定义低阈值
    '''
    lines = cv.HoughLines(edge, rho=1, theta=np.pi/180, threshold=200)
    for line in lines:
        print("type(line):")
        rho, theta = line[0]
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a*rho
        y0 = b*rho
        x1 = int(x0+1000*(-b))  # 不知为何要 ×1000,只有知道源码才行
        y1 = int(x0+1000*(a))
        x2 = int(x0-1000*(-b))
        y2 = int(y0-1000*(a))
        cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
    cv.imshow("image-lines", image)

cv.HoughLines画出来的都是直线,每个字都引出了一条直线吧?

二、cv.HoughLinesP(常用)

def line_detect_possible_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    edge = cv.Canny(gray, 50, 150, apertureSize=3)

    '''
        cv.HoughLinesP(常用):返回准确位置的起始点和终止点,一个一个细小的线段,
        则可以根据线段进行测距
            rho:半径步长
            theta:角度,每次偏转一度
            threshold:自定义低阈值
            minLineLength:最小线的长度为50个像素,小于50就不算是一个线段。
            maxLineGap = 10:同一直线上两个线段的间隙距离小于10的话,就把两个线段连接起来,当做一条线段
    '''
    lines = cv.HoughLinesP(edge, rho=1, theta=np.pi/180,
                           threshold=100, minLineLength=50, maxLineGap=10)
    for line in lines:
        print(type(line))
        x1,y1,x2,y2= line[0]
        cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
    cv.imshow("line_detect_possible_demo", image)

minLineLength = 50
minLineLength = 10

从中可想而知,cv.HoughLines没有minLineLength的情况下,就会乱七八糟,而且不是线段,全是直线。

相关文章

  • 18、直线检测

    霍夫直线变化 一、cv.HoughLines (不常用) 二、cv.HoughLinesP(常用) 从中可想而知,...

  • 直线检测

    直线检测大体可分为从上而下以及从下而上两种模式。1。从上而下的直线检测模式典型代表Hough变换,将直线由坐标空间...

  • 2019-06-03 OpenCV学习

    21直线检测 霍夫直线变换用来做直线检测,前提条件是边缘检测已完成。 22圆检测 霍夫圆变换原理: 从平面坐标到极...

  • 直线检测问题

    For slam, 直线相对于点这些特征来说会更robust, 更常见。 毕竟点特征更需要环境纹理信息很丰富。 刚...

  • 霍夫变换

    霍夫变换——直线   Hough Line Transform用来做直线检测,前提是已经做了边缘检测。  霍夫变换...

  • Opencv第五课--直线检测和圆检测

    直线检测 直线检测通常会用到Hough变换,原理可参考:https://www.cnblogs.com/AndyJ...

  • 霍夫变换

    一、霍夫直线检测 霍夫变换(Hough Transfrom),是1972年提出的,最开始就是用来在图像中检测直线,...

  • 第 7 章 提取直线、轮廓和区域

    本章包括以下内容: 用Canny 算子检测图像轮廓; 用霍夫变换检测直线; 点集的直线拟合; 提取连续区域; 计算...

  • 霍夫变换之直线检测

    霍夫变换 查看图像 结果: 边缘检测 结果: 霍夫变换检测直线 结果:

  • OpenCV+Python直线、圆检测

    霍夫变换 应用范围 只要能用数学方程表示的形状,都能用霍夫变换检测到 直线检测 直线数学方程:或者,其中是原点到直...

网友评论

      本文标题:18、直线检测

      本文链接:https://www.haomeiwen.com/subject/rensrqtx.html