提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
C++求解圆心、半径、直线与圆交点
前言
最近测试了一个检测项目,需要检测出手机后置摄像头孔洞圆环周边是否全部点胶,并计算点胶完成的百分比。
一、检测对象
点胶区域识别由前序深度学习软件识别,并在示意图中画出深度学习识别的点胶部分,如下图红色连通域。
二、检测方法
1.检测圆心和半径
主要方法是调用霍夫圆检测函数,并根据机械定位和先验信息约束正解。
Mat src = imread("..\\data\\0.jpg", 1);//输入图
Mat srcdisplay = Mat::zeros(src.rows, src.cols, CV_8UC1);
vector<Mat> channels;
split(src, channels);
Mat heightMapRed = channels.at(2);
//1检测圆心半径
Mat srcgray;
cvtColor(src, srcgray, COLOR_RGB2GRAY);
double circle_R = 0;
double perimeter = 0;
double circlearea = 0;
vector<Vec3f> circles;
Point circle_center;
HoughCircles(srcgray, circles, HOUGH_GRADIENT, 1, 200, 100, 30, 800, 1200);
for (size_t i = 0; i < circles.size(); i++)
{
Point center((circles[i][0]), (circles[i][1]));
int radius = (circles[i][2]);
if (center.x <2200 && center.x > 1800 && center.y < 1900 && center.y > 1500 && radius > 900 && radius < 1100)
{
circle_R = radius + 12;
circle_center = center;
cout << "圆心X=" << center.x << " " << "圆心Y=" << center.y << " " <<