Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用OpenCV C++实现图像(颜色)分割_C++_Opencv_Image Segmentation - Fatal编程技术网

用OpenCV C++实现图像(颜色)分割

用OpenCV C++实现图像(颜色)分割,c++,opencv,image-segmentation,C++,Opencv,Image Segmentation,如图所示,我想输入图像并得到几个像这样的片段 它就像是最近的颜色片段,所以我认为它接近meanshift的概念 我在这里搜索了相关的问题,但仍然不知道如何在OpenCV C++中构造和构造。我正在寻找一些建议,如果能得到一段实现代码供我参考,我将不胜感激!谢谢你的帮助 ================================================== 2015年5月19日编辑 让我补充一点,我正在尝试的实现之一就是这里的分水岭: 这不是完美的,但是我想要的结果。在这个工具中,用

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

它就像是最近的颜色片段,所以我认为它接近meanshift的概念

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

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

2015年5月19日编辑

让我补充一点,我正在尝试的实现之一就是这里的分水岭:

这不是完美的,但是我想要的结果。在这个工具中,用户需要手动操作绘制分水岭线,所以我正在寻找它的自动版本。听起来有点难,但是。。。如果您能提供一些建议或代码,我将不胜感激。

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的分段实现。它并不完美,但它是自动的,完成了大部分工作,您可以下载源代码并试用。

请发布您所做的任何代码。也许您可以使用分水岭算法进行分割,并从分割元素中选择平均颜色进行可视化?!这就是我开始的方式,我尝试了在网上搜索的几个实现,但似乎没有人接近我想要的,除了P.Felzenszwalb,d.Huttenlocher的高效基于图形的图像分割,这是演示站点:但不幸的是,我在这段代码中遇到了一个问题,修补了其中的loadPPM函数,所以我来这里是为了寻求一些其他的/改进的方法来实现它。@top是的,你说得对!这就是我现在尝试做的,但是我看到的流域实现需要手动工作,而不是自动分段…这非常接近我想要的!但我要试着调整参数,使它更平稳!为了使分割区域大小准确定位,该颜色分割是语义分割的前置操作,所以我会仔细考虑模糊或者不去破坏它的局部特征信息。@ OASIS你想要超级像素来进行语义分割,你可能想考虑更现代的方法,例如,如果你在寻找均值偏移分段,而不是过滤你可能要考虑的过滤。高效的基于图形的分割是一个非常好的算法,如果您在linux中,您可以尝试转换image.anything image.ppm。还有一个很好的opencv端口。@melchizedek很遗憾我在Windows中,不知道该做什么。。。我得到的高级版本可以读取任何文件格式,但不仅仅是.PPM的格式,但仍然有一些错误。不幸的是,这篇博文不见了。它是,但没有任何图像。