matlab 填补空洞,OpenCV空洞填充算法
讨论帖:
在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空洞填充算法相关推荐
- matlab中种子填充算法
因为作业要求用简单种子填充和线扫描填充,所以在网上找了一个用matlab写的简单种子填充算法. https://www.cnblogs.com/tiandsp/archive/2012/12/06/2 ...
- matlab灰度图孔洞填充,一种深度图像空洞的自动填充方法与流程
本发明涉及深度图像空洞填充技术,从彩色图像的结构相似性出发,求解空洞像素点的多尺度结构相似性,将空洞像素分为平滑区域空洞像素和非平滑区域空洞像素,并针对不同的空洞像素,采用不同的填充算法.在平滑区域空 ...
- OpenCV中泛洪填充算法解析与应用
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 泛洪填充(Flood Fill)很多时 ...
- OpenCV实现FloodFill泛洪填充算法的代码及相关函数详解
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 FloodFill泛洪填充算法是在很多图形绘制软 ...
- opencv漫水填充算法floodfill
定义 : 漫水填充算法是一种用特定颜色填充连通区域,通过设置像素上下限及连通方式来达到不同的连通效果.漫水填充经常用来标记或分离图像的一部分,以便于对其进行进一步的处理和分析.也可以从输入图像获取掩码 ...
- 【youcans 的 OpenCV 例程200篇】132. 形态学重建之孔洞填充算法
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...
- 水漫金山:OpenCV漫水填充算法(Floodfill)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云(浅墨) ...
- 【OpenCV入门教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云(浅墨) ...
- 【OpenCV新手教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云(浅墨) ...
- pythonopencv算法_python opencv之分水岭算法示例
本文介绍了python opencv之分水岭算法示例,分享给大家,具体如下: 目标 使用分水岭算法对基于标记的图像进行分割 使用函数cv2.watershed() 原理: 灰度图像可以被看成拓扑平面, ...
最新文章
- linux认证授权系统,linux高级操作系统用户认证与授权-20210323002921.doc-原创力文档...
- 通过HTTP发包工具了解HTTP协议
- NYOJ 837 Wythoff Game
- Android 数据库 LiteOrm 的使用
- structs2多文件上传
- 从一般到特殊-C#中的对象
- 新版蓝色广告跳转页面代码分享
- linux 串口总线,linux中的serio(虚拟串行输入输出)总线
- Hadoop问题:启动hadoop 2.6遇到的datanode启动不了
- python3.7安装tensorflow-gpu_tensorflow-gpu安装的常见问题及解决方案
- ActiveX控件注册的几种方法
- 影视剪辑,Pr视频剪辑软件自学,界面介绍与自定义
- windows,远程开机,远程唤醒(WOL,Wake-on-LAN)
- 广播风暴和环路是什么
- 人体大脑是如何产生压力的,脑体的机制变化过程
- stm32驱动ili9486液晶显示屏
- ubuntu中trusted.gpg文件有什么作用
- 【python】 爬取网易云音乐 专辑图片+歌词
- 多事之秋----为什么受伤又是华为
- 【STM32单片机入门】学习资源推荐,学习经验分享
热门文章
- 张驰课堂:六西格玛中的Minitab软件,到底有多重要
- 亲测有效:解决inkscape转换的svg图标,上传到阿里图标库不显示问题
- 态度决定一切《跟任何人都聊得来》
- 给 木子健康管理室 添加微信公众号 并制作一条 图文消息
- Saliency map (fixation map) 生成热点图-python实现
- 魅族手机怎么把计算机放到桌面,魅族手机怎么投屏到电脑 照片怎么传到新手机...
- Cesium资料汇总
- Entry name ‘firebase-abt.properties‘ collided
- Javascript匿名类
- pcf8591简明教程 及 51单片机最大只能读到127问题解决