OpenCV|OpenCV 基于超像素分割的图像区域选取方法及源码
本系列文章由
@yhl_leo
出品,转载请注明出处。
文章链接:
http://blog.csdn.net/yhl_leo/article/details/51386993
工程源码GitHub: yhlleo/SuperpixelRegionFill
抠取图像区域的一个小demo,借助图像超像素分割的方法,将图像成子分块,再利用种子填充算法,选取子块区域。
超像素分割方法,采用论文 SEEDS: Superpixels Extracted via Energy-Driven Sampling 提出的方法,对于物体的边界具有较好的保留,如下图所示。可以辅助目标检测中制作Banchmark。
文章图片
文章图片
本工程在其基础上,获得的图像labels
和contours
,然后分别实现区域种子填充,Windows下编译环境为:
- OpenCV
- CMake
- Visual Studio
demo
包括:SuperSeedsTest
: SEEDS 提供的用例,可获取超像素分割labels
和contours
SeedFillTest
: 基于labels
种子填充子块BoundaryFillTest
: 基于contours
种子填充子块
(测试代码以
./data
文件下demo.jpg
为例)在选取了种子点
(col, row)->(248, 71)
后,两种方法得到的区域mask分别为:由于保存的
labels
图像是8bit位图(内存中是CV_32SC1
),所以是有损的,如果使用labels
区域填充的时候,最好不要使用demo中从保存图像中加载labels
数据(也就是在内存中进行,例如通过函数传参)。【OpenCV|OpenCV 基于超像素分割的图像区域选取方法及源码】种子填充算法使用递归的形式,对于小块的像素区域比较有效,但是由于编译器栈深度有限,填充区域过大的时候,会出现栈溢出的BUG,这里需要注意一下(有时间再优化这里)。
更复杂的接口以及操作,可以根据需要自己定义。
References
- SEEDS: Superpixels Extracted via Energy-Driven Sampling
- SEEDS Superpixels Wrapper for OpenCV
推荐阅读
- 做一件事情的基本原理是什么()
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 基于|基于 antd 风格的 element-table + pagination 的二次封装
- 宋仲基&宋慧乔(我们不公布恋情,我们直接结婚。)
- opencv|opencv C++模板匹配的简单实现
- Java|Java OpenCV图像处理之SIFT角点检测详解
- dubbo基本认识
- Python基础|Python基础 - 练习1
- 基于爱,才会有“愿望”当“要求”。2017.8.12
- 股票型公募基金投资要领