opencv c++ 霍夫直线检测
创始人
2024-03-22 01:40:16

目的:在进行图像边缘提取后,将数据从平面坐标转换到极坐标空间,即完成了直线的信息提取。

1、原理

        平面坐标系:通过之间的斜率k截距b来确定一条直线。y = kx+b

        极坐标系:通过半径r角度θ来确定一条直线。r = xcosθ + y sinθ

注:在图像处理中,定义的平面坐标原点位于左上角,横轴为x,右方向为正方向,纵轴为y,下方向为正方向

        对于直线上任意一点(x_{0}, y_{0}),都有:

        

        对于任意点(x_{0}, y_{0}),经过它的线有无数:

        

        将其通过公式转换为极坐标的形式,这些线就变成了θ-r坐标系上的一系列点:

        

         当引入其他点后,通过极坐标的曲线交点就能确定这些点所处的直线的r、θ信息。:

        

        注:在实际算法中,会设定一个阈值T,当相交于同一点的点确定的曲线数量大于T时,才将这条被确定直线纳入统计,反之则排除它。

参考:(36条消息) 霍夫直线检测原理详解_秃头小苏的博客-CSDN博客_霍夫直线

2、API

 OpenCV: Feature Detection

这两个计算直线的API的输出均为 vector形式,分别储存距离、角度、累加值(用于判断该直线是否纳入统计)。 


void cv::HoughLines	(	InputArray 	image,OutputArray 	lines,double 	rho,double 	theta,int 	threshold,double 	srn = 0,double 	stn = 0,double 	min_theta = 0,double 	max_theta = CV_PI )	

void cv::HoughLinesP	(	InputArray 	image,OutputArray 	lines,double 	rho,double 	theta,int 	threshold,double 	minLineLength = 0,double 	maxLineGap = 0 )	

image——二值化后的图像。
lines——输出的直线信息, vector/vector 形式,分别储存距离、角度、累加值(用于判断该直线是否纳入统计)
rho——距离步长
theta ——角度步长
threshold ——累加值阈值,只统计交点累计格式大于该值的直线。
srn    ——用于多阶霍夫变换, it is a divisor for the distance resolution rho . The coarse accumulator distance resolution is rho and the accurate accumulator resolution is rho/srn . If both srn=0 and stn=0 , the classical Hough transform is used. Otherwise, both these parameters should be positive.
stn     ——用于多阶霍夫变换, it is a divisor for the distance resolution theta.
min_theta ——最小角度阈值
max_theta ——最大角度阈值。Must fall between min_theta and CV_PI. 

minLineLength    Minimum line length. Line segments shorter than that are rejected.
maxLineGap    ——当直线有间断时,认为互相间断的两条直线为同一直线的允许最大像素间隔数。

 HoughLines    与 HoughLinesP    区别:

HoughLines    输出 vectorHoughLinesP    输出vector,直线两个端点坐标,顺序为x1,y1, x2, y2。

void QuickDemo::hough_line_detect(Mat& image)
{GaussianBlur(image, image, Size(3, 3), 0);Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);Mat binary;threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);namedWindow("THRESH_OTSU", WINDOW_FREERATIO);imshow("THRESH_OTSU", binary);vector> contours;vector hierachy;findContours(binary, contours, hierachy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point());//霍夫直线检测vector lines;HoughLines(binary, lines, 1, CV_PI / 180.0, 300, 0, 0);//绘制检测出的直线Point ptz1, ptz2;for (size_t i = 0; i < lines.size(); ++i) {float rth = lines[i][0];//距离float theta = lines[i][1];//角度float accu = lines[i][2];//累加值//cout << "rth:" << rth << ",theta:" << theta << ",accu:" << accu << endl;double a = cos(theta);double b = sin(theta);double x0 = a * rth, y0 = b * rth;ptz1.x = cvRound(x0 + 1000 * (-b));ptz1.y = cvRound(y0 + 1000 * (a));ptz2.x = cvRound(x0 - 1000 * (-b));ptz2.y = cvRound(y0 - 1000 * (a));//line(image, ptz1, ptz2, Scalar(255, 0, 0), 2, 8);//根据角度给线不同的颜色int angle = round((theta / CV_PI) * 180);if (rth > 0) {line(image, ptz1, ptz2, Scalar(255, 0, 0), 2, 8);if(angle == 90)line(image, ptz1, ptz2, Scalar(0, 255, 255), 2, 8);if(angle < 1)line(image, ptz1, ptz2, Scalar(0, 255, 255), 2, 8);}elseline(image, ptz1, ptz2, Scalar(0, 255, 0), 2, 8);}namedWindow("hough line", WINDOW_FREERATIO);imshow("hough line", image);
}

void QuickDemo::hough_P_line_detect(Mat& image)
{Mat gray, binary;cvtColor(image, gray, COLOR_BGR2GRAY);Canny(gray, binary, 80, 160, 3, false);namedWindow("Canny", WINDOW_FREERATIO);imshow("Canny", binary);vector lines;HoughLinesP(binary, lines, 1, CV_PI / 180.0, 80, 30, 10);Mat result = Mat::zeros(image.size(), image.type());for (int i = 0; i < lines.size(); ++i) {line(result, Point(lines[i][0], lines[i][1]), Point(lines[i][2], lines[i][3]), Scalar(0, 255, 0),2, 8);}namedWindow("hough P", WINDOW_FREERATIO);imshow("hough P", result);}

 

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...