一. 标准霍夫变换:HoughLines()函数
c++:
void HoughLines(InputArray src,OutputArray lines,double rho,double theta,
int threshold,double srn=0,double= stn = 0)
1. 第一个参数: 输入的图片
2. 第二个参数:储存霍夫变换检测到线条的输出矢量
3. 第三个参数: 以像素为单位的距离精度
4. 第四个参数: 以弧度为单位的角度精度
5. 第五个参数:累加平面的阈值参数
6. 第六、七个参数:默认为0
- 程序示例
#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(void)
{
Mat srcImage = imread("1.jpg");
Mat midImage,dstImage;
Canny(srcImage,midImage,50,200,3);
cvtColor(midImage,dstImage,COLOR_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];
Point pt1,pt2;
double a = cos(theta),b=sin(theta);
double x0 = a*rho,y0 = b*rho;
pt1.x = cvRound(x0+1000*(-b));
pt1.y = cvRound(y0+1000*(a));
pt2.x = cvRound(x0-1000*(-b));
pt2.y = cvRound(y0-1000*(a));
line(dstImage,pt1,pt2,Scalar(55,100,123),1,LINE_AA);
}
imshow("AA",dstImage);
waitKey(0);
return 0;
}
二. 累计概率霍夫变换:HoughLinesP()
1.函数说明
c++
void HoughLinesP(InputArray src,OutputArray lines,double rho,double theta,
int threshold,double minLineLength=0,double maxLineGap=0)
1. 参数一:输入图片
2. 参数二:检测到的线条输出矢量
3. 参数三:以像素为单位的距离精度
4. 参数四:以距离为单位的角度精度
5. 参数五:累加平面的阈值参数
6. 参数六:最低线段的长度
7. 参数七:同一行点与点之间连接起来的最大距离
- 程序示例
#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(void)
{
Mat srcImage = imread("1.jpg");
Mat midImage,dstImage;
Canny(srcImage,midImage,50,200,3);
cvtColor(midImage,dstImage,COLOR_GRAY2BGR);
vector<Vec4i> lines;
HoughLinesP(midImage,lines,1,CV_PI/180,80,50,10);
for(size_t i=0;i<lines.size();i++)
{
Vec4i l = lines[i];
line(dstImage,Point(l[0],[1]),Point(l[2],l[3]),Scalar(186,88,255),1,LINE_AA);
}
imshow("AA",dstImage);
waitKey(0);
return 0;
}
三. 霍夫圆变换: HoughCircles()
- 函数说明
c++:
void HoughCircles(IntputArray image,OutputArray circles,int method,double dp,
double minDist,double param1=100,double param2 = 100,int minRadius=0,int maxRadius=0)
1. 参数一:输入图片
2. 参数二:检测到圆的输出矢量(x,y,raduis)
3. 参数三:检测的方法,只能用HOUGH_GRADENT
4. 参数四:用来检测圆心的累加器图像的分辨率与输入图像之比的倒数
5. 参数五:圆心与圆心直接的最小距离
6. 参数六、七:默认
7. 参数八、九:表圆半径的最大、最小值
- 程序示例
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(void)
{
Mat srcImage = imread("1.jpg");
Mat midImage,dstImage;
cvtColor(srcImage,midImage,COLOR_BGR2GRAY);
GaussianBlur(midImage,midImage,Size(9,9),2,2);
vector<Vec3f> circles;
HoughCircles(midImage,circles,HOUGH_GRADIENT,1.5,10,200,100,0,0);
for(size_t i = 0;i<circles.size();i++)
{
Point center(cvRound(circles[i][0]),cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
circle(srcImage,center,3,Scalar(0,255,0),-1,8,0);
circle(srcImage,center,radius,Scalar(155,50,255),3,8,0);
}
imshow("A",srcImage);
waitKey(0);
return 0;
}
Thank for your reading!!!