使用OpenCV C ++进行图像(颜色?)分割

Image (color?) segmentation with opencv C++

http://i.imgur.com/iIv4gJa.png

如图所示,我想输入图像并得到几个分段。

就像将最接近的颜色段聚类一样,所以我认为它与"均移"的概念很接近吗?

我在这里搜索了相关问题,但仍然不知道如何在opencv C ++中启动和构造结构。我正在寻找一些建议,如果能获得一段实现代码供我参考,我将不胜感激!谢谢你的帮助!!

==================================================

编辑5/19/2015

让我补充一点,我尝试的实现之一是此处的分水岭:(http://blog.csdn.net/fdl19881/article/details/6749976)。

enter image description here

这不是完美的,但我想要的结果。在此工具中,用户需要手动操作(绘制分水岭线),因此我正在寻找它的自动版本。听起来有点难,但是...我会为提出一些建议或一段代码而感激。


Opencv文档:链接

参数:这里

Meanshift过滤的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include"opencv2/core/core.hpp"
#include"opencv2/imgproc/imgproc.hpp"

using namespace cv;
using namespace std;

Mat img, res, element;

int main(int argc, char** argv)
{

   namedWindow("Meanshift", 0 );
   img = imread( argv[1] );
// GaussianBlur(img, img, Size(5,5), 2, 2);
   pyrMeanShiftFiltering( img, res, 20, 45, 3);
   imwrite("meanshift.png", res);
   imshow("Meanshift", res );

   waitKey();

   return 0;
}

这是图像的输出,您可能需要先进行一些预处理,或者找到一些更好的参数:

output

编辑:事先输出一些高斯模糊(代码注释)

here


查看现有分割方法的问题在于,它们是在Matlab中实现的(Uni以外的任何人都不能使用),或者它们不是自动的。 用户需要通过选择感兴趣的对象或指示如何拆分颜色的级别来预处理图片的方法没有用,因为它不是自动的。 如果愿意,您可以尝试本博客文章中介绍的基于OpenCV的细分实现。 它不是完美的,但它是自动的,可以完成大部分工作,您实际上可以下载源代码并进行尝试。