当前位置: 代码迷 >> 综合 >> OpenCV4 目标物体矫正过程中拟合椭圆和霍夫圆效果区别
  详细解决方案

OpenCV4 目标物体矫正过程中拟合椭圆和霍夫圆效果区别

热度:23   发布时间:2023-12-10 02:11:55.0

作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处


目录

背景:

思路:

代码:


背景:

        目标物体固定大小,目标中包含圆形轮廓以及直线边缘,想将目标摆正角度并且x、y方向平移至固定位置。

(倾斜并且不在规定位置的目标图) 

思路:

        需要将固定大小的目标物体先矫正角度(利用关键边缘线进行霍夫线变换后计算角度,然后仿射变换矫正角度),然后想通过找到圆心确定需要x、y方向平移的幅度。

        找圆心第一个想到的是霍夫圆变换 HoughCircles(),但是发现找到的圆和圆心不太准确。

         后来尝试了轮廓的椭圆拟合 fitEllipse() ,发现效果比较好,如下图。

代码:

vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
//只输出最顶层轮廓 baseCny是canny边缘检测后的Mat
findContours(baseCny, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);for (int i = 0; i < contours.size(); i++)
{RotatedRect ellipse_rect = fitEllipse(contours[i]);//获取椭圆的长轴和短轴长度(外接矩形的长和宽)int w = ellipse_rect.size.width;int h = ellipse_rect.size.height;//椭圆的中心坐标Point center = ellipse_rect.center;//绘制拟合椭圆ellipse(imgEnd, ellipse_rect, Scalar(0, 0, 255), 1, 8);
}
/*// 找到扁形工件的左上角圆,然后比较模板中的位置,确定仿射变换的值
vector<Vec3f> unknownSurfaceCircles;
cv::HoughCircles(baseCny, unknownSurfaceCircles, HOUGH_GRADIENT, 1, 80, 100, 15, 10, 15);
if (unknownSurfaceCircles.size() < 1) {cout << "图片中没有找到圆" << endl;
}
//在原图中画出圆心和圆
for (size_t i = 0; i < unknownSurfaceCircles.size(); i++)
{//提取出圆心坐标Point center(cvRound(unknownSurfaceCircles[i][0]), cvRound(unknownSurfaceCircles[i][1]));//提取出圆半径int radius = cvRound(unknownSurfaceCircles[i][2]);//圆心circle(imgEnd, center, 3, Scalar(0, 255, 0), -1, 8, 0);//圆circle(imgEnd, center, radius, Scalar(0, 0, 255), 1, 8, 0);
}*/

【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】 

  相关解决方案