使用opencv将一组图像划分为k个簇
我有一个图像数据集,我想分为k个簇。我正在尝试使用k-means集群的opencv实现 首先,我将Mat图像存储到Mat向量中,然后尝试使用kmeans函数。但是,我得到了一个断言错误。 图像是否应该存储到不同的结构中?我已经阅读了k-means文档,但我似乎不明白我做错了什么。这是我的代码: 提前谢谢大家,使用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
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;i cout用于分割2D点而不是图像。谢谢您的回答。有没有一种方法可以用它来划分nxd维度的图像?你能推荐另一种方法将一组图像分组为k个簇吗?kmeans不限于2D点,它可以对N-D点进行聚类。因此,您可以使用kmeans对图像进行聚类,只需将矩阵转换为1xN,将图像视为向量(1xN)。谢谢。值是否应按像素顺序存储?例如(r,g,b,r,g,b,r,g,b…)欢迎。是的,行得通。只要在所有图像中排列一致,任何排列都可以。