OpenCV霍夫变换

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值