讨论帖:

在Matlab下,使用imfill可以很容易的完成孔洞填充操作,感觉这是一个极为常用的方法,然而不知道为什么Opencv里面却没有集成这个函数。在网上查了好多关于Opencv下的孔洞填充方法,大部分使用轮廓查找方法去做的,但对于这种方法,总感觉不是特别好。之前了解过冈萨雷斯那本书上的孔洞填充算法,所以想着手重新写一个。这里借鉴了冈萨雷斯书上的集合运算方法(并不完全一样)

大致思路如下:

0, 设原图像为 A。

1, 首先A向外延展一到两个像素,并将值填充为背景色(0),标记为B。

2, 使用floodFill函数将B的大背景填充,填充值为前景色(255),种子点为(0,0)即可(步骤一可以确保(0,0)点位于大背景),标记为C。

3, 将填充好的图像裁剪为原图像大小(去掉延展区域),标记为D。

4, 将D取反与A相加即得填充的图像,E=A|(~D)。

// fillhole.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include

#include

#include "opencv2/imgproc/imgproc.hpp"

#pragma comment(lib,"opencv_core2410d.lib")

#pragma comment(lib,"opencv_highgui2410d.lib")

#pragma comment(lib,"opencv_imgproc2410d.lib")

using namespace std;

using namespace cv;

void fillHole(const Mat srcBw, Mat &dstBw)

{

Size m_Size = srcBw.size();

Mat Temp=Mat::zeros(m_Size.height+2,m_Size.width+2,srcBw.type());//延展图像

srcBw.copyTo(Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)));

cv::floodFill(Temp, Point(0, 0), Scalar(255));

Mat cutImg;//裁剪延展的图像

Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)).copyTo(cutImg);

dstBw = srcBw | (~cutImg);

}

int main()

{

Mat img=cv::imread("23.jpg");

Mat gray;

cv::cvtColor(img, gray, CV_RGB2GRAY);

Mat bw;

cv::threshold(gray, bw, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

Mat bwFill;

fillHole(bw, bwFill);

imshow("填充前", gray);

imshow("填充后", bwFill);

waitKey();

return 0;

}

我调试好的工程:点击打开链接

http://download.csdn.net/detail/wangyaninglm/9389329



本文同步分享在 博客“shiter”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

matlab 填补空洞,OpenCV空洞填充算法相关推荐

  1. matlab中种子填充算法

    因为作业要求用简单种子填充和线扫描填充,所以在网上找了一个用matlab写的简单种子填充算法. https://www.cnblogs.com/tiandsp/archive/2012/12/06/2 ...

  2. matlab灰度图孔洞填充,一种深度图像空洞的自动填充方法与流程

    本发明涉及深度图像空洞填充技术,从彩色图像的结构相似性出发,求解空洞像素点的多尺度结构相似性,将空洞像素分为平滑区域空洞像素和非平滑区域空洞像素,并针对不同的空洞像素,采用不同的填充算法.在平滑区域空 ...

  3. OpenCV中泛洪填充算法解析与应用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 泛洪填充(Flood Fill)很多时 ...

  4. OpenCV实现FloodFill泛洪填充算法的代码及相关函数详解

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 FloodFill泛洪填充算法是在很多图形绘制软 ...

  5. opencv漫水填充算法floodfill

    定义 : 漫水填充算法是一种用特定颜色填充连通区域,通过设置像素上下限及连通方式来达到不同的连通效果.漫水填充经常用来标记或分离图像的一部分,以便于对其进行进一步的处理和分析.也可以从输入图像获取掩码 ...

  6. 【youcans 的 OpenCV 例程200篇】132. 形态学重建之孔洞填充算法

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  7. 水漫金山:OpenCV漫水填充算法(Floodfill)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云(浅墨) ...

  8. 【OpenCV入门教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云(浅墨) ...

  9. 【OpenCV新手教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云(浅墨) ...

  10. pythonopencv算法_python opencv之分水岭算法示例

    本文介绍了python opencv之分水岭算法示例,分享给大家,具体如下: 目标 使用分水岭算法对基于标记的图像进行分割 使用函数cv2.watershed() 原理: 灰度图像可以被看成拓扑平面, ...

最新文章

  1. linux认证授权系统,linux高级操作系统用户认证与授权-20210323002921.doc-原创力文档...
  2. 通过HTTP发包工具了解HTTP协议
  3. NYOJ 837 Wythoff Game
  4. Android 数据库 LiteOrm 的使用
  5. structs2多文件上传
  6. 从一般到特殊-C#中的对象
  7. 新版蓝色广告跳转页面代码分享
  8. linux 串口总线,linux中的serio(虚拟串行输入输出)总线
  9. Hadoop问题:启动hadoop 2.6遇到的datanode启动不了
  10. python3.7安装tensorflow-gpu_tensorflow-gpu安装的常见问题及解决方案
  11. ActiveX控件注册的几种方法
  12. 影视剪辑,Pr视频剪辑软件自学,界面介绍与自定义
  13. windows,远程开机,远程唤醒(WOL,Wake-on-LAN)
  14. 广播风暴和环路是什么
  15. 人体大脑是如何产生压力的,脑体的机制变化过程
  16. stm32驱动ili9486液晶显示屏
  17. ubuntu中trusted.gpg文件有什么作用
  18. 【python】 爬取网易云音乐 专辑图片+歌词
  19. 多事之秋----为什么受伤又是华为
  20. 【STM32单片机入门】学习资源推荐,学习经验分享

热门文章

  1. 张驰课堂:六西格玛中的Minitab软件,到底有多重要
  2. 亲测有效:解决inkscape转换的svg图标,上传到阿里图标库不显示问题
  3. 态度决定一切《跟任何人都聊得来》
  4. 给 木子健康管理室 添加微信公众号 并制作一条 图文消息
  5. Saliency map (fixation map) 生成热点图-python实现
  6. 魅族手机怎么把计算机放到桌面,魅族手机怎么投屏到电脑 照片怎么传到新手机...
  7. Cesium资料汇总
  8. Entry name ‘firebase-abt.properties‘ collided
  9. Javascript匿名类
  10. pcf8591简明教程 及 51单片机最大只能读到127问题解决