精华内容
下载资源
问答
  • C++ 图像处理中多种直线检测方法!C++ 图像处理中多种直线检测方法
  • Python+OpenCV 图像处理直线检测霍夫变换是图像处理中从图像中识别几何形状的基本方法之一, 应用很广泛, 也有很多改进算法. 主要用来从图像中分离出具有某种相同特征的几何形状 (如, 直线, 圆等).python 实现...

    Python+OpenCV 图像处理之直线检测

    霍夫变换是图像处理中从图像中识别几何形状的基本方法之一, 应用很广泛, 也有很多改进算法. 主要用来从图像中分离出具有某种相同特征的几何形状 (如, 直线, 圆等).

    python 实现importcv2

    importnumpyasnp

    # 使用霍夫直线变换做直线检测, 前提条件: 边缘检测已经完成

    __author__="boboa"

    # 标准霍夫线变换

    defline_detection_demo(image):

    gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

    edges=cv2.Canny(gray,50,150,apertureSize=3)

    lines=cv2.HoughLines(edges,1,np.pi/180,200)# 函数将通过步长为 1 的半径和步长为π/180 的角来搜索所有可能的直线

    forlineinlines:

    rho,theta=line[0]# line[0] 存储的是点到直线的极径和极角, 其中极角是弧度表示的

    a=np.cos(theta)# 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(image,(x1,y1),(x2,y2),(0,0,255),2)

    cv2.imshow("image_lines",image)

    # 统计概率霍夫线变换

    defline_detect_possible_demo(image):

    gray=cv2.cvtColor(image,cv2.COLOR_BGRA2GRAY)

    edges=cv2.Canny(gray,50,150,apertureSize=3)

    # 函数将通过步长为 1 的半径和步长为π/180 的角来搜索所有可能的直线

    lines=cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength=50,maxLineGap=10)

    forlineinlines:

    x1,y1,x2,y2=line[0]

    cv2.line(image,(x1,y1),(x2,y2),(0,0,255),2)

    cv2.imshow("line_detect_possible_demo",image)

    if__name__=="__main__":

    img=cv2.imread("image/lines.jpg")

    cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)

    cv2.imshow("input image",img)

    line_detect_possible_demo(img)

    cv2.waitKey(0)

    cv2.destroyAllWindows()

    标准霍夫线变换运行结果

    ab7653affab982b574eb7acc55df2e04.gif

    统计概率霍夫线变换运行结果

    ab7653affab982b574eb7acc55df2e04.gif

    标准霍夫线变换 cv2.HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines

    参数: image - 边缘检测的输出图像, 8 位, 单通道二进制源图像

    rho - 距离步长

    theta - 角度步长

    threshold - 阈值, 只有大于该值的点才有可能被当作极大值, 即至少有多少条正弦曲线交于一点才被认为是直线

    统计概率霍夫线变换 cv2.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]) -> lines

    参数: image - 边缘检测的输出图像, 该图像为单通道 8 位二进制图像

    rho - 参数极径

    ab7653affab982b574eb7acc55df2e04.gif以像素值为单位的分辨率, 这里一般使用 1 像素

    theta - 参数极角

    ab7653affab982b574eb7acc55df2e04.gif以弧度为单位的分辨率, 这里使用 1 度

    threshold - 检测一条直线所需最少的曲线交点

    minLineLength - 线的最短长度, 比这个线短的都会被忽略

    maxLineGap - 两条线之间的最大间隔, 如果小于此值, 这两条线就会被看成一条线.

    HoughLinesP, 效果更好, 检测图像中分段的直线 (而不是贯穿整个图像的直线)

    来源: http://www.bubuko.com/infodetail-3106539.html

    展开全文
  • 数字图像处理 Hough 变换直线检测 ,matlab 实现 实验八 Hough 变换直线检测 一实验目的 理解Hough变换的原理了解其应用掌握利用Hough变换进行直线检测的处 理过程 及编程方法 二实验内容 利用Hough变换检测直线通常...
  • 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是...
  • Python+OpenCV图像处理直线检测

    千次阅读 2019-06-28 12:58:00
    霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。 python实现 import cv2 import numpy as np...

    霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。

    python实现

    import cv2
    import numpy as np
    # 使用霍夫直线变换做直线检测,前提条件:边缘检测已经完成
    
    __author__ = "boboa"
    
    
    # 标准霍夫线变换
    def line_detection_demo(image):
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        edges = cv2.Canny(gray, 50, 150, apertureSize=3)
        lines = cv2.HoughLines(edges, 1, np.pi/180, 200)  # 函数将通过步长为1的半径和步长为π/180的角来搜索所有可能的直线
        for line in lines:
            rho, theta = line[0]  # line[0]存储的是点到直线的极径和极角,其中极角是弧度表示的
            a = np.cos(theta)   # 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(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
        cv2.imshow("image_lines", image)
    
    
    # 统计概率霍夫线变换
    def line_detect_possible_demo(image):
        gray = cv2.cvtColor(image, cv2.COLOR_BGRA2GRAY)
        edges = cv2.Canny(gray, 50, 150, apertureSize=3)
        # 函数将通过步长为1的半径和步长为π/180的角来搜索所有可能的直线
        lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 100, minLineLength=50, maxLineGap=10)
        for line in lines:
            x1, y1, x2, y2 = line[0]
            cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
        cv2.imshow("line_detect_possible_demo", image)
    
    
    if __name__ == "__main__":
        img = cv2.imread("image/lines.jpg")
        cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
        cv2.imshow("input image", img)
        line_detect_possible_demo(img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()

    标准霍夫线变换运行结果

    统计概率霍夫线变换运行结果

    标准霍夫线变换cv2.HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines

    参数:image-边缘检测的输出图像,8位,单通道二进制源图像

        rho-距离步长

        theta-角度步长

        threshold-阈值,只有大于该值的点才有可能被当作极大值,即至少有多少条正弦曲线交于一点才被认为是直线

    统计概率霍夫线变换cv2.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]) -> lines

    参数:image-边缘检测的输出图像,该图像为单通道8位二进制图像

         rho-参数极径 r 以像素值为单位的分辨率,这里一般使用 1 像素

         theta-参数极角 \theta 以弧度为单位的分辨率,这里使用 1度

         threshold-检测一条直线所需最少的曲线交点

         minLineLength-线的最短长度,比这个线短的都会被忽略

         maxLineGap-两条线之间的最大间隔,如果小于此值,这两条线就会被看成一条线。

    HoughLinesP,效果更好,检测图像中分段的直线(而不是贯穿整个图像的直线)



    转载于:https://www.cnblogs.com/qianxia/p/11101758.html

    展开全文
  • 霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从...

    简介:

    1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线(线段)。

    2.Hough变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解,那么这个解就对应着要寻找的几何形状的参数(比如说直线,那么就会得到直线的斜率k与常熟b,圆就会得到圆心与半径等等)

    3.霍夫线变换是一种用来寻找直线的方法。用霍夫线变换之前, 首先需要对图像进行边缘检测的处理,也即霍夫线变换的直接输入只能是边缘二值图像。

    4.霍夫直线检测的具体原理参见:

    代码如下:

    #直线检测

    #使用霍夫直线变换做直线检测,前提条件:边缘检测已经完成

    import cv2 as cv

    import numpy as np

    #标准霍夫线变换

    def line_detection(image):

    gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)

    edges = cv.Canny(gray, 50, 150, apertureSize=3) #apertureSize参数默认其实就是3

    cv.imshow("edges", edges)

    lines = cv.HoughLines(edges, 1, np.pi/180, 80)

    for line in lines:

    rho, theta = line[0] #line[0]存储的是点到直线的极径和极角,其中极角是弧度表示的。

    a = np.cos(theta) #theta是弧度

    b = np.sin(theta)

    x0 = a * rho #代表x = r * cos(theta)

    y0 = b * rho #代表y = r * sin(theta)

    x1 = int(x0 + 1000 * (-b)) #计算直线起点横坐标

    y1 = int(y0 + 1000 * a) #计算起始起点纵坐标

    x2 = int(x0 - 1000 * (-b)) #计算直线终点横坐标

    y2 = int(y0 - 1000 * a) #计算直线终点纵坐标 注:这里的数值1000给出了画出的线段长度范围大小,数值越小,画出的线段越短,数值越大,画出的线段越长

    cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2) #点的坐标必须是元组,不能是列表。

    cv.imshow("image-lines", image)

    #统计概率霍夫线变换

    def line_detect_possible_demo(image):

    gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)

    edges = cv.Canny(gray, 50, 150, apertureSize=3) # apertureSize参数默认其实就是3

    lines = cv.HoughLinesP(edges, 1, np.pi / 180, 60, minLineLength=60, maxLineGap=5)

    for line in lines:

    x1, y1, x2, y2 = line[0]

    cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)

    cv.imshow("line_detect_possible_demo",image)

    src = cv.imread('E:/imageload/louti.jpg')

    print(src.shape)

    cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)

    cv.imshow('input_image', src)

    line_detection(src)

    src = cv.imread('E:/imageload/louti.jpg') #调用上一个函数后,会把传入的src数组改变,所以调用下一个函数时,要重新读取图片

    line_detect_possible_demo(src)

    cv.waitKey(0)

    cv.destroyAllWindows()

    运行结果:

    注意:

    1.opencv的HoughLines函数是标准霍夫线变换函数,该函数的功能是通过一组参数对

     的集合来表示检测到的直线,其函数原型为:HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines

    时间: 2020-10-21

    展开全文
  • 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是...

     

    简介:

    1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线(线段)。

    2.Hough变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解,那么这个解就对应着要寻找的几何形状的参数(比如说直线,那么就会得到直线的斜率k与常熟b,圆就会得到圆心与半径等等)

    3.霍夫线变换是一种用来寻找直线的方法。用霍夫线变换之前, 首先需要对图像进行边缘检测的处理,也即霍夫线变换的直接输入只能是边缘二值图像。

    4.霍夫直线检测的具体原理参见:

    https://blog.csdn.net/ycj9090900/article/details/52944708

    http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html

    http://lib.csdn.net/article/opencv/24201

    代码如下:

    复制代码

    #直线检测
    #使用霍夫直线变换做直线检测,前提条件:边缘检测已经完成
    import cv2 as cv
    import numpy as np
    
    #标准霍夫线变换
    def line_detection(image):
        gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)
        edges = cv.Canny(gray, 50, 150, apertureSize=3)  #apertureSize参数默认其实就是3
        cv.imshow("edges", edges)
        lines = cv.HoughLines(edges, 1, np.pi/180, 80)
        for line in lines:
            rho, theta = line[0]  #line[0]存储的是点到直线的极径和极角,其中极角是弧度表示的。
            a = np.cos(theta)   #theta是弧度
            b = np.sin(theta)
            x0 = a * rho    #代表x = r * cos(theta)
            y0 = b * rho    #代表y = r * sin(theta)
            x1 = int(x0 + 1000 * (-b)) #计算直线起点横坐标
            y1 = int(y0 + 1000 * a)    #计算起始起点纵坐标
            x2 = int(x0 - 1000 * (-b)) #计算直线终点横坐标
            y2 = int(y0 - 1000 * a)    #计算直线终点纵坐标    注:这里的数值1000给出了画出的线段长度范围大小,数值越小,画出的线段越短,数值越大,画出的线段越长
            cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)    #点的坐标必须是元组,不能是列表。
        cv.imshow("image-lines", image)
    
    #统计概率霍夫线变换
    def line_detect_possible_demo(image):
        gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)
        edges = cv.Canny(gray, 50, 150, apertureSize=3)  # apertureSize参数默认其实就是3
        lines = cv.HoughLinesP(edges, 1, np.pi / 180, 60, minLineLength=60, maxLineGap=5)
        for line in lines:
            x1, y1, x2, y2 = line[0]
            cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
        cv.imshow("line_detect_possible_demo",image)
    
    src = cv.imread('E:/imageload/louti.jpg')
    print(src.shape)
    cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE) 
    cv.imshow('input_image', src)
    line_detection(src)
    src = cv.imread('E:/imageload/louti.jpg') #调用上一个函数后,会把传入的src数组改变,所以调用下一个函数时,要重新读取图片
    line_detect_possible_demo(src)
    cv.waitKey(0)
    cv.destroyAllWindows()

    复制代码

    运行结果:

    注意:

    1.opencv的HoughLines函数是标准霍夫线变换函数,该函数的功能是通过一组参数对 (\theta, r_{\theta}) 的集合来表示检测到的直线,其函数原型为:HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines

    image参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。

    rho参数表示参数极径 r 以像素值为单位的分辨率,这里一般使用1像素。

    theta参数表示参数极角 \theta 以弧度为单位的分辨率,这里使用1度。

    threshold参数表示检测一条直线所需最少的曲线交点。

    lines参数表示储存着检测到的直线的参数对 (r,\theta) 的容器 。

    srn参数、stn参数默认都为0。如果srn = 0且stn = 0,则使用经典的Hough变换。

    min_theta参数表示对于标准和多尺度Hough变换,检查线条的最小角度。

    max_theta参数表示对于标准和多尺度Hough变换,检查线条的最大角度。

    2.opencv的HoughLinesP函数是统计概率霍夫线变换函数,该函数能输出检测到的直线的端点 (x_{0}, y_{0}, x_{1}, y_{1}),其函数原型为:HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]) -> lines

    image参数表示边缘检测的输出图像,该图像为单通道8位二进制图像。

    rho参数表示参数极径 r 以像素值为单位的分辨率,这里一般使用 1 像素。

    theta参数表示参数极角 \theta 以弧度为单位的分辨率,这里使用 1度。

    threshold参数表示检测一条直线所需最少的曲线交点。

    lines参数表示储存着检测到的直线的参数对 (x_{start}, y_{start}, x_{end}, y_{end}) 的容器,也就是线段两个端点的坐标。

    minLineLength参数表示能组成一条直线的最少点的数量,点数量不足的直线将被抛弃。

    maxLineGap参数表示能被认为在一条直线上的亮点的最大距离。

    展开全文
  • 图像处理之霍夫变换(直线检测算法)

    万次阅读 多人点赞 2012-07-07 14:42:21
    图像处理之霍夫变换(直线检测算法) 霍夫变换是图像变换中的经典手段之一,主要用来从图像中分离出具有某种相同特征的几何 形状(如,直线,圆等)。霍夫变换寻找直线与圆的方法相比与其它方法可以更好的减少噪 声...
  • 霍夫变换是图像处理必然接触到的一个算法,它通过一种投票算法检测具有特定形状的物体,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果,该方法可以进行圆,直线...
  • 图像处理之霍夫变换(直线检测算法)霍夫变换是图像变换中的经典手段之一,主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。霍夫变换寻找直线与圆的方法相比与其它方法可以更好的减少噪声干扰。...
  • 工业图像处理实战-直线检测

    千次阅读 2018-12-25 13:42:02
    请听题,请检测如下线段长度,已知dx=0.0215; 第一种方法,CvBoundingRect /* *函数名:cvBoundingRect *输入参数:points:可以是数组,也可以是cvSeq *返回值:CvRect :轮廓的最小包围矩形 */ CvRect ...
  • P.V.C.Hough[1]第一次提出用霍夫变换(Hough Transform) 检测二值图中的直线和曲线, R.D.Duda和P.E.Hart[2]根据霍夫变换提出了一种更有效的直线检测方法, 这就是通常所称的标准霍夫直线检测。 下面详细介绍它的...
  • 霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它将图像空间中的特征点映射到参数空间进行投票,通过检测累计结果的局部极值点得到一个符合某特定形状的点的集合。经典霍夫变换用来检测图像中的直线,...
  • import cv2 import numpy as np from matplotlib import pyplot as plt __author__ = "zxsuperstar" ...1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一, ...
  • 本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。...
  • 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是...
  • 霍夫变换(Hough Transfrom)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换的结果。...
  •  Hough变换是数字图像处理中一种常用的几何形状识别方法,它可以识别直线,圆,椭圆,弧线等 等几何形状,其基本原理是利用图像二维空间和Hough参数空间的点-线对偶性,把图像空间中的形 状检测问题转换到
  • 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是...
  • 霍夫变换是一种特征检测(feature extraction),被广泛应用在图像分析(image analysis)、计算机视觉(computer vision)以及数位影像处理(digital image processing)。霍夫变换是用来辨别找出物件中的特征,例如:...
  • 图像处理中,霍夫变换用来检测任意能够用数学公式表达的形状,即使这个形状被破坏或者有点扭曲。下面我们将看到利用HoughLine算法来阐述霍夫变化进行直线检测的原理,把此算法应用到特点图像的边缘检测是可取的。...
  • 这节课能容不多,基本上是遵循规律编写代码即可     import cv2 as cv ...方法一""" gray=cv.cvtColor(img,cv.COLOR_RGB2GRAY) edges=cv.Canny(gray,50,150,apertureSize=3)...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 350
精华内容 140
关键字:

图像处理直线检测方法