本系列文章由 @yhl_leo 出品,转载请注明出处。

文章链接: http://blog.csdn.net/yhl_leo/article/details/51386993


工程源码GitHub: yhlleo/SuperpixelRegionFill

抠取图像区域的一个小demo,借助图像超像素分割的方法,将图像成子分块,再利用种子填充算法,选取子块区域。

超像素分割方法,采用论文 SEEDS: Superpixels Extracted via Energy-Driven Sampling 提出的方法,对于物体的边界具有较好的保留,如下图所示。可以辅助目标检测中制作Banchmark。



本工程在其基础上,获得的图像labelscontours,然后分别实现区域种子填充,Windows下编译环境为:

  • OpenCV
  • CMake
  • Visual Studio

工程demo包括:

  • SuperSeedsTest: SEEDS 提供的用例,可获取超像素分割labelscontours
  • SeedFillTest : 基于labels种子填充子块
  • BoundaryFillTest : 基于contours种子填充子块

(测试代码以./data文件下demo.jpg为例)

在选取了种子点(col, row)->(248, 71)后,两种方法得到的区域mask分别为:

由于保存的labels图像是8bit位图(内存中是CV_32SC1),所以是有损的,如果使用labels区域填充的时候,最好不要使用demo中从保存图像中加载labels数据(也就是在内存中进行,例如通过函数传参)。

种子填充算法使用递归的形式,对于小块的像素区域比较有效,但是由于编译器栈深度有限,填充区域过大的时候,会出现栈溢出的BUG,这里需要注意一下(有时间再优化这里)。

更复杂的接口以及操作,可以根据需要自己定义。

References

最新文章

  1. 一步一步学习underscore的封装和扩展方式
  2. CLR VIA C#事件
  3. UGUI之布局的使用
  4. MyEclipse运行很慢的原因
  5. 【转】android新建项目时 出现appcompat_v7工程错误和红色感叹号
  6. C语言中 指针与结构体
  7. 模块化开发之sea.js实现原理总结
  8. 整理一些常用函数库PHP版本
  9. js 放大镜用法bug解决
  10. Robot Framework 学习笔记(二)-------第一个脚本
  11. 简单H5单页面真机调试
  12. jenkins如何获取gitlab上的代码
  13. PHP入门知识
  14. [git与github]__git与github简单了解
  15. tomcat多实例方案启动脚本
  16. solusvm安装过程
  17. 在Ubuntu 13.10 中安装配置 Hadoop 2.2.0
  18. Docker 学习笔记 ---Docker组件
  19. 简单地理解HTTPS 转
  20. android 几个工具方法

热门文章

  1. bzoj2216
  2. Jsp入门小常识
  3. HDU 1847 博弈
  4. 【转】Linux下history命令用法
  5. JdbcTemplate:Jdbc模板和数据库元数据
  6. 影响ERP成功实施的因素及实施方法
  7. 关于类似vue-cli 脚手架
  8. JS——选择水果
  9. dubbo之延迟暴露
  10. 06--Qt窗口布局