OpenCV 应用fitEllipse函数一种异常问题分析 末蓝、 2022-07-13 09:10 106阅读 0赞 想要求得一个图像中轮廓的椭圆拟合 代码如下: for(int k = 0; k < (int)threecontours.size(); k++) { RotatedRect rRect = fitEllipse(threecontours.at(k)); double majorAxis = rRect.size.height > rRect.size.width ? rRect.size.height : rRect.size.width; double minorAxis = rRect.size.height > rRect.size.width ? rRect.size.width : rRect.size.height; float rate = majorAxis/minorAxis; if (rate<2) //滤除长短轴小于2的轮廓 { drawContours(g_EllipseFilter, threecontours, k, Scalar(0), CV_FILLED); } } 处理部分图片时发现异常: ![这里写图片描述][3a65b340fb738459ac995bc438cd9c10.png] 调试程序时发现:某个轮廓内的像素点个数只有四个 ![这里写图片描述][4c35cea0199aa7dad4b25ca13aa8e8e2.png] 说明fitEllipse函数要求轮廓的像素点个数大于等于5个,可以将代码修改为: for(int k = 0; k < (int)threecontours.size(); k++) //查找轮廓 { if (int(threecontours.at(k).size()) <=6) { drawContours(g_EllipseFilter, threecontours, k, Scalar(0), CV_FILLED); } else { RotatedRect rRect = fitEllipse(threecontours.at(k)); double majorAxis = rRect.size.height > rRect.size.width ? rRect.size.height : rRect.size.width; double minorAxis = rRect.size.height > rRect.size.width ? rRect.size.width : rRect.size.height; float rate = majorAxis/minorAxis; if (rate<2) //滤除长短轴小于2的轮廓 { drawContours(g_EllipseFilter, threecontours, k, Scalar(0), CV_FILLED); } } } [3a65b340fb738459ac995bc438cd9c10.png]: /images/20220713/a0e4972e39ea43918538f1e2b03df648.png [4c35cea0199aa7dad4b25ca13aa8e8e2.png]: /images/20220713/ba524e16a4ce4c8298f9eef5a5fe43f4.png
还没有评论,来说两句吧...