opencv中houghlines函数返回的rho和theta
来源:互联网 发布:百度云盘加载数据失败 编辑:程序博客网 时间:2024/05/17 21:06
cvHoughLines2()直线检测中代码的疑惑
rho (0,0)到直线的距离,rho的正负判定:Y轴截距大于0的均为正,Y轴截距小于0则rho为负。theta为直线与Y轴负方向的夹角,以Y轴负轴为起始轴,逆时针旋转到直线的角度。
houghlines2()的meth参数有三种,你问的代码是CV_HOUGH_STANDARD,CV_HOUGH_PROBABILISTIC。在STANDARD里,lines返回rho和theta,分别代表直线与原点的距离和
直线与Y周负向夹角(0-180),在PROBABILISTIC里,lines返回线段的头尾两个坐标值,至于在STANDARD里为什么:pt1.x=cvRound(...),是为了把rho和theta转换为坐标在窗口里显示出来,我也不知道为什么那样搞,就是初中几何知识,我用的方法和他不一样,
for(int i=0;i<lines->total;i++)
{
float* line =(float*)cvGetSeqElem(lines,i);
CvPoint ptr1,ptr2;
float rho=line[0];
float theta=line[1];
double cos_theta=cos(theta),sin_theta=sin(theta);
if (fabs(sin_theta)<0.01) //直线水平
{
ptr1.x=cvRound(rho);
ptr1.y=0;
ptr2.x=cvRound(rho);
ptr2.y=img->width;
}
else if(fabs(cos_theta)<0.01) //直线垂直
{
ptr1.x=0;
ptr1.y=cvRound(rho);
ptr2.x=img->width;
ptr2.y=cvRound(rho);
}
else if(rho<0)
{
ptr1.x=cvRound(rho/cos_theta);
ptr1.y=0;
ptr2.x=img->width;
ptr2.y=cvRound(fabs(img->width/tan(theta))+rho/sin_theta);
}
else if(theta<1.57078)
{
ptr1.x=0;
ptr1.y=cvRound(rho/sin_theta);
ptr2.x=cvRound(rho/cos_theta);
ptr2.y=0;
}
else
{
ptr1.x=0;
ptr1.y=cvRound(rho/sin_theta);
ptr2.x=img->width;
ptr2.y=cvRound(fabs(img->width/tan(theta))+rho/sin_theta);
}
直线与Y周负向夹角(0-180),在PROBABILISTIC里,lines返回线段的头尾两个坐标值,至于在STANDARD里为什么:pt1.x=cvRound(...),是为了把rho和theta转换为坐标在窗口里显示出来,我也不知道为什么那样搞,就是初中几何知识,我用的方法和他不一样,
for(int i=0;i<lines->total;i++)
{
float* line =(float*)cvGetSeqElem(lines,i);
CvPoint ptr1,ptr2;
float rho=line[0];
float theta=line[1];
double cos_theta=cos(theta),sin_theta=sin(theta);
if (fabs(sin_theta)<0.01) //直线水平
{
ptr1.x=cvRound(rho);
ptr1.y=0;
ptr2.x=cvRound(rho);
ptr2.y=img->width;
}
else if(fabs(cos_theta)<0.01) //直线垂直
{
ptr1.x=0;
ptr1.y=cvRound(rho);
ptr2.x=img->width;
ptr2.y=cvRound(rho);
}
else if(rho<0)
{
ptr1.x=cvRound(rho/cos_theta);
ptr1.y=0;
ptr2.x=img->width;
ptr2.y=cvRound(fabs(img->width/tan(theta))+rho/sin_theta);
}
else if(theta<1.57078)
{
ptr1.x=0;
ptr1.y=cvRound(rho/sin_theta);
ptr2.x=cvRound(rho/cos_theta);
ptr2.y=0;
}
else
{
ptr1.x=0;
ptr1.y=cvRound(rho/sin_theta);
ptr2.x=img->width;
ptr2.y=cvRound(fabs(img->width/tan(theta))+rho/sin_theta);
}
0 0
- opencv中houghlines函数返回的rho和theta
- opencv的HoughLines( )函数
- OpenCV 霍夫线变换 HoughLines( )函数
- opencv中HoughLines源码解析
- Opencv HoughLines
- 概率论:p(x|theta)和p(x;theta)的区别
- 概率论:p(x|theta)和p(x;theta)的区别
- HoughLines 函数
- opencv GPU HoughLines直线
- Opencv源代码分析HoughLines
- matlab中hough函数,houghpeaks函数,houghlines函数
- OPencv霍夫变换cvHoughLines2的参数theta的说明
- OpenCV的霍夫变换工具HoughLines使用
- opencv中的标准霍夫线变换HoughLines()的-学习笔记
- delta值、gamma值、theta值、vega值、Rho值 (
- 关于opencv 中cvCreateVideoWriter函数返回NULL情况的总结
- 概率论:p(x|theta)和p(x;theta)的区别(转载,还没写好)
- HoughLines函数用法示例
- 读书感悟:如何最高效的读完一本书
- linux下常用文本处理命令
- Android之Content和activity、service、Application关系和attachBaseContext函数调用的时候
- 18.[个人]C++线程入门到进阶(18)----线程函数:SuspendThread
- mnist deep convolutional cetwork源码说明
- opencv中houghlines函数返回的rho和theta
- 你好,再见;你好,幸会!
- 【C语言】C语言中3种作用域举例
- Caffe源码解读(十一):自定义一个layer
- linux shell脚本对未定义变量的判断以及if的用法
- 网狐6603、客户端创建房间、会陪分配到其他客户端已创建好的房间去
- Java static修饰初始块{}
- 19.[个人]C++线程入门到进阶(19)----线程函数:ResumeThread
- Spring入门学习——第二阶段总结图