分享

opencv 二值图像的孔洞填充

 mediatv 2020-03-05

有的时候,我们需要对图像进行孔洞填充,一般想到的方法都是,使用findcontours函数,查找最外层轮廓,然后画出找到的轮廓。

这确实是一种方法,但似乎不够高效。下面贴出一个函数,可以更好的实现这个功能。

话不多说,上代码。开发环境 opencv2.4.13+vs2013   其他vs或者opencv版本应该也可以跑出来

  1. void chao_fillHole(const cv::Mat srcimage, cv::Mat &dstimage)
  2. {
  3. Size m_Size = srcimage.size();
  4. Mat temimage = Mat::zeros(m_Size.height + 2, m_Size.width + 2, srcimage.type());//延展图像
  5. srcimage.copyTo(temimage(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)));
  6. floodFill(temimage, Point(0, 0), Scalar(255));
  7. Mat cutImg;//裁剪延展的图像
  8. temimage(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)).copyTo(cutImg);
  9. dstimage = srcimage | (~cutImg);
  10. }

当你仔细看看这几行代码,就会知道,原理很简单了吧。。

运行效果如图所示


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多