openCV学习9-霍夫变换直线检测+霍夫圆检测

1.直线检测


↑左图是某个点的r-角度曲线,右图将好几个点的曲线放到了一个坐标系下,它们有一个相交的点,说明在这个角度,它们都在离原点距离为r的同一条直线上!!!




↓这里的cat.png是很随意的几条线组成的图片

#include <opencv2\highgui\highgui.hpp>  
#include <opencv2\imgproc\imgproc.hpp>  
#include <opencv2\objdetect\objdetect.hpp>  
#include <opencv2\imgproc\types_c.h>  
#include <opencv2\objdetect\objdetect_c.h>
#include<opencv2/opencv.hpp>
#include<iostream>
#include<cmath>
#include<cstdio>

using namespace std;
using namespace cv;

int main()
{
	Mat src,dst;
	src=imread("cat.png");
	if(src.empty())
	{
		cout<<"!!???"<<endl;
		return -1;
	}
	namedWindow("cat!",1);
	imshow("cat!",src);
	namedWindow("out",1);

	Mat src_gray;
	Canny(src,src_gray,150,200);
	cvtColor(src_gray,dst,CV_GRAY2BGR);//转回彩图
	imshow("gray",src_gray);

	vector<Vec4f>plines;
	HoughLinesP(src_gray,plines,1,CV_PI/180.0,10,0,10);
	Scalar color=Scalar(0,0,255);
	for(size_t i=0;i<plines.size();i++)
	{
		Vec4f hline=plines[i];
		line(dst,Point(hline[0],hline[1]),Point(hline[2],hline[3]),color,3,LINE_AA);
	}
	imshow("out",dst);
	waitKey(0);
	return 0;
}

2.圆检测





↓检测这个图cat.jpg


#include <opencv2\core\core.hpp>  
#include <opencv2\highgui\highgui.hpp>  
#include <opencv2\imgproc\imgproc.hpp>  
#include <opencv2\objdetect\objdetect.hpp>  
#include <opencv2\imgproc\types_c.h>  
#include <opencv2\objdetect\objdetect_c.h>
#include<opencv2/opencv.hpp>
#include<iostream>
#include<cmath>
#include<cstdio>

using namespace std;
using namespace cv;

int main()
{
	Mat src,dst;
	src=imread("cat.jpg");
	if(src.empty())
	{
		cout<<"!!???"<<endl;
		return -1;
	}
	namedWindow("cat!",1);
	imshow("cat!",src);
	namedWindow("out",1);

	//中值滤波
	Mat m;
	medianBlur(src,m,3);
	cvtColor(m,m,CV_BGR2GRAY);

	//霍夫检测
	vector<Vec3f>p;
	HoughCircles(m,p,CV_HOUGH_GRADIENT,1,20,100,30,10,40);
	src.copyTo(dst);
	for(size_t i=0;i<p.size();i++)
	{
		Vec3f cc=p[i];
		circle(dst,Point(cc[0],cc[1]),cc[2],Scalar(0,0,255),2,LINE_AA);
		circle(dst,Point(cc[0],cc[1]),2,Scalar(27,231,167),2,LINE_AA);
	}
	imshow("out",dst);
	waitKey(0);
	return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_39396954/article/details/80542094