本文参考@浅墨_毛星云 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26977557
今天学习了教程【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑,表示对霍夫线变换如何由概念转化为代码,理解了很久,坐标图都画了好几页,因为是小白,理论知识不清楚,所以遇到一些问题,可能对有些人很基础,但对于我来说,还是难理解,不过终于明白,代码是怎么来的了,一定要好好记录一下,以免日后忘记~
还是老步骤,整理笔记
OpenCV中霍夫变换相关的知识点,以及了解了OpenCV中实现霍夫线变换的HoughLines、HoughLinesP函数的使用方法,实现霍夫圆变换的HoughCircles函数的使用方法。
一、引言
二、霍夫变换概述
三、霍夫线性变换
1、HoughLines( )函数示例代码
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
//载入原始图和Mat变量定义
Mat src=imread("img/line1.png",1);
Mat dst,mid;
//进行边缘检测和转化为灰度图
Canny(src,mid,50,200,3);//进行一此canny边缘检测
cvtColor(mid,dst,CV_GRAY2BGR);//转化边缘检测后的灰度图转化为三通道图
//进行霍夫线变换
vector<Vec2f> lines;//定义一个矢量结构lines用于存放得到的线段矢量集合
HoughLines(mid,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];
Point pt1,pt2;
double a=cos(theta),b=sin(theta);
double x0=a*rho,y0=b*rho;
//为什么这样?有配套的图片解释见下面效果图之后的补充部分,1000表示点(x0,y0),在直线,向上,向下1000的距离
pt1.x=cvRound(