opencv3学习之霍夫变换
来源:互联网 发布:淘宝上的阿玛尼正品吗 编辑:程序博客网 时间:2024/05/16 19:21
霍夫变换分为霍夫线变换和霍夫圆变换。
1.霍夫线变换分为三种:标准霍夫变换、多尺度霍夫变换、累计概率霍夫变换。前两个由HoughLines调用,第三个 由HoughLinesP调用。
霍夫线变换的原理:其实就是笛卡尔坐标和极坐标之间的转换,公式:r=x*cosθ+y*sinθ
对于给定的x,y一点,对于笛卡尔坐标中的任意一点x,y都可以根据公式作出一个图像,也就是一条曲线,如果两个点(x1,y1),(x2,y2)的图像能够交于一点,那么说明这两点在同一条直线上。可以通过设置阈值,来限定多少点交于一点则认为它们在一条直线上。
代码如下:
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespacecv;
using namespacestd;
int main(){
Mat srcImage,midImage,dstImage;
srcImage=imread("/Users/oumoemoe/Downloads/timg-2.jpeg");
Canny(srcImage, midImage,50, 200,3);
cvtColor(midImage, dstImage,CV_GRAY2BGR);
vector<Vec2f> lines;
HoughLines(midImage, lines,1, CV_PI/180,150,0,0);
for(size_t i=0;i<lines.size();i++){
float rho=lines[i][0],theta=lines[i][1];//lines是一个矢量,它有两个参数,第一个参数是rho也就是当前点到坐标原点的距离,第二个参数是角度。用i做变量是因为我们要获取每个点的信息,对每个点进行处理。
double a=cos(theta),b=sin(theta);
double x0=rho*a,y0=rho*b;
Point pt1,pt2;
pt1.x=cvRound(x0+1000*(-b));
pt1.y=cvRound(y0+1000*a);
pt2.x=cvRound(x0-1000*(-b));
pt2.y=cvRound(y0+1000*(-a));
//上面这些式子,可以用下面这个图来解释,其中这个1000,是随意取得,就是说上下到(x0,y0)这个点各1000
//pt1,pt2两点的坐标就是通过下面的几何变换推倒出来的,这个图是我自己画的
line(dstImage, pt1, pt2,Scalar(55,10,195),1,LINE_AA);//pt1,pt2分为代表直线的起点和终点,毕竟两个点就能确定一条直线
}
imshow("1", midImage);
imshow("2", dstImage);
waitKey(0);
return0;
}
- opencv3学习之霍夫变换
- opencv3标准霍夫变换-HoughLines函数
- opencv3累计概率霍夫变换-HoughLinesP函数
- opencv学习之霍夫变换
- opencv学习(三十三)之霍夫变换
- Opencv学习之霍夫变换
- 学习【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑---笔记
- Java+opencv3.2.0之仿射变换
- 《OpenCV3编程入门》学习笔记七:图像变换
- opencv3学习之Mat类
- opencv3学习之Point类
- opencv3学习之绘图基础
- opencv3学习之addWeight()函数
- 关于Opencv3在使用霍夫变换(houghlines)时一直出问题的解决
- opencv3.1 距离变换
- Opencv学习---霍夫变换
- OpenCV之霍夫变换
- OpenCV之霍夫变换
- 蓝桥杯:01字串【水题】
- 3人3鬼过河问题
- [Robot OS]ROS机器人探索群资料列表(不定期更新)
- TabLayout
- 关于拼凑面额的动态规划算法
- opencv3学习之霍夫变换
- Query on a tree SPOJ
- MAC下pyenv和pyenv-virtualenv插件初探
- hdu 6165 FFF at Valentine (数学思想 || 缩点)
- Spring 注解 @Resource @Autowired @Repository
- <note>8月23日
- zcmu-1928
- Eclipse生成Javadoc
- 对AI的理解及应用的思考