一. 标准霍夫变换: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
2.程序示例
#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. 参数七:同一行点与点之间连接起来的最大距离
2.程序示例
#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()
1.函数说明
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. 参数八、九:表圆半径的最大、最小值
2.程序示例
#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!!!
公众号:FPGA之旅