想要求得一个图像中轮廓的椭圆拟合 代码如下:
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);
}
}
处理部分图片时发现异常:
调试程序时发现:某个轮廓内的像素点个数只有四个
说明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);
}
}
}