前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV 应用fitEllipse函数一种异常问题分析

OpenCV 应用fitEllipse函数一种异常问题分析

作者头像
chaibubble
发布2022-05-07 09:04:42
5050
发布2022-05-07 09:04:42
举报
文章被收录于专栏:深度学习与计算机视觉

想要求得一个图像中轮廓的椭圆拟合 代码如下:

代码语言:javascript
复制
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个,可以将代码修改为:

代码语言:javascript
复制
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);
        }
}

} 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档