【opencv-python】概率霍夫变换

简介

概率霍夫变换(probabilistic Hough transform)用于查找二值图像中的线段,python函数为cv2.HoughLinesP(),该函数实现[Matas00]中描述的用于线段检测的概率Hough变换算法,函数使用方法如下图所示:
【opencv-python】概率霍夫变换_第1张图片
各参数含义为:

  • image:8位二值图像,在函数执行的时候图像可能被修改;
  • lines:算法识别出来的直线,每个直线以 ( x 1 , y 1 , x 2 , y 2 ) (x_1,y_1,x_2,y_2) (x1,y1,x2,y2)的形式表达,其中 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2)是探测到线段的首尾点;
  • rho:累加器的距离分辨率(以像素为单位);
  • theta:累加器的角度分辨率(以弧度为单位);
  • threshold:累加器阈值参数,只有累加到足够多的票数的直线(>threshold)才被认为是目标直线;
  • minLineLength:最小化线长度,如果线段长度比这个数值小,这个线则被放弃;
  • maxLineGap:代表一条直线中能够被允许的最大间隙,当线中的两个点小于这个值时,两个点将被连接视为一条直线。

案例分析

所用测试田字格图像和这篇博文所用图像相同,如下图所示:


python代码如下:

img = cv2.imread('squares.jpg')
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        edges = cv2.Canny(gray,50,200,apertureSize = 3)
        minLineLength = 100
        maxLineGap = 10
        lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
        for line in lines:
            print('line:', line)
            for x1,y1,x2,y2 in line :
                cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)
        cv2.imwrite('houghlines5.jpg',img)

运行结果如下,可以看到,程序可以实现程序分段识别和显示的效果。

【opencv-python】概率霍夫变换_第2张图片

你可能感兴趣的:(pyopencv,python,opencv)