opencv累计概率霍夫线变换-HoughLinesP函数

使用霍夫变换之前,首先要对图像进行边缘检测处理,也就是说霍夫线变换的输入图只能是二值图

简单原理:一条直线能够通过在平面寻找交于一点的曲线数量来检测,
而越多曲线交于一点也就意味着这个交点表示的直线由更多的点组成,
通过设置直线上的点的阈值来定义多少调曲线交于一点,这样才检测到了一条直线。

累计概率霍夫线变换:HoughLinesP()函数

累计概率霍夫线变换是标准霍夫变换算法的一个改进,它在一定的范围内进行霍夫变换,计算单独线段的方向以及范围,从而减少计算量,缩短计算时间。

#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
    
    
    Mat src=imread("铅笔.jpg");
    Mat src_gray,dst;
    imshow("原图",src);
    //图像预处理
    cvtColor(src,src_gray,COLOR_RGB2GRAY);
    GaussianBlur(src_gray,dst,Size(5,5),10,10);
    Canny(dst,dst,150,100,3);

    imshow("canny",dst);
    //进行霍夫线变换
    vector<Vec4i> lines;
    HoughLinesP(dst,lines,1,CV_PI/180,80,50,10);
    
    for(int i=0;i<lines.size();i++)
    {
    
    
        Vec4i l=lines[i];
        line(src,Point(l[0],l[1]),Point(l[2],l[3]),Scalar(0,255,0),2);
    }
    imshow("效果图",src);
    waitKey(0);

    return 0;
}

HoughLinesP函数参数解析:

HoughLinesP(dst,lines,1,CV_PI/180,80,50,10);
  • 第三个参数(1):直线搜索时的进步尺寸的单位半径
  • 第四个参数(CV_PI/180):直线搜索时的进步尺寸的单位角度
  • 第五个参数(80):识别图中一条直线时它在累加平面中必须达到的值,只有大于阈值的线段才能被检测通过并返回到结果中
  • 第六个参数:表示最低线段的长度,比这个设定参数短的线段就不能被显示出来
  • 第七个参数:允许将同一行点与点之间连接起来的最大距离

猜你喜欢

转载自blog.csdn.net/seniorc/article/details/112330061