繁体   English   中英

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

[英]Image (color?) segmentation with opencv C++

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

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

它就像聚类最接近的颜色段,所以我认为它接近“meanshift”的概念?

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

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

编辑2015年5月19日

让我补充一点,我尝试的一个实现是Watershed here :( http://blog.csdn.net/fdl19881/article/details/6749976 )。

在此输入图像描述

这不是完美的,但我想要的结果。 在这个工具中,用户需要手动操作(绘制分水岭线),所以我正在寻找它的AUTOMATIC版本。 听起来有点难,但是...我会欣赏一些建议或一些代码来做到这一点。

Opencv文档: 链接

参数: 这里

Meanshift过滤的示例代码:

#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;
}

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

产量

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

这里

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM