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

时间:2017-06-12 09:47:16

标签: 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 = "*.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();
}

0 个答案:

没有答案