Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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将一组图像划分为k个簇_Opencv_Computer Vision_Label_Cluster Analysis_K Means - Fatal编程技术网

使用opencv将一组图像划分为k个簇

使用opencv将一组图像划分为k个簇,opencv,computer-vision,label,cluster-analysis,k-means,Opencv,Computer Vision,Label,Cluster Analysis,K Means,我有一个图像数据集,我想分为k个簇。我正在尝试使用k-means集群的opencv实现 首先,我将Mat图像存储到Mat向量中,然后尝试使用kmeans函数。但是,我得到了一个断言错误。 图像是否应该存储到不同的结构中?我已经阅读了k-means文档,但我似乎不明白我做错了什么。这是我的代码: 提前谢谢大家, vector <Mat> images; string folder = "D:\\football\\positive_clustering\\"; string mask

我有一个图像数据集,我想分为k个簇。我正在尝试使用k-means集群的opencv实现

首先,我将Mat图像存储到Mat向量中,然后尝试使用kmeans函数。但是,我得到了一个断言错误。 图像是否应该存储到不同的结构中?我已经阅读了k-means文档,但我似乎不明白我做错了什么。这是我的代码:

提前谢谢大家,

vector <Mat> images;
string folder = "D:\\football\\positive_clustering\\";
string mask = "*.bmp";

vector<string> files = getFileList(folder + mask);

for (int i = 0; i < files.size(); i++)
{
    Mat img = imread(folder + files[i]);
    images.push_back(img);
}

cout << "Vector of positive samples created" << endl;



int k = 10;
cv::Mat bestLabels;
cv::kmeans(images, k, bestLabels, TermCriteria(), 3, KMEANS_PP_CENTERS);

//have a look
vector<cv::Mat> clusterViz(bestLabels.rows);
for (int i = 0; i<bestLabels.rows; i++)
{
    clusterViz[bestLabels.at<int>(i)].push_back(cv::Mat(images[bestLabels.at<int>(i)]));
}

namedWindow("clusters", WINDOW_NORMAL);
for (int i = 0; i<clusterViz.size(); i++)
{
    cv::imshow("clusters", clusterViz[i]);
    cv::waitKey();
}
矢量图像;
string folder=“D:\\football\\positive\u clustering\\”;
字符串掩码=“*.bmp”;
矢量文件=getFileList(文件夹+掩码);
对于(int i=0;icout用于分割2D点而不是图像。谢谢您的回答。有没有一种方法可以用它来划分nxd维度的图像?你能推荐另一种方法将一组图像分组为k个簇吗?kmeans不限于2D点,它可以对N-D点进行聚类。因此,您可以使用kmeans对图像进行聚类,只需将矩阵转换为1xN,将图像视为向量(1xN)。谢谢。值是否应按像素顺序存储?例如(r,g,b,r,g,b,r,g,b…)欢迎。是的,行得通。只要在所有图像中排列一致,任何排列都可以。