我想用K-Means算法对很多图像进行聚类。我想要设置群集,以便每个群集表示图像的主色或色调。我在报纸Colour Image Clustering using K-Means上读到过一些关于这方面的内容
有没有人有用OpenCV做这件事的想法?
也许我可以比较每个图像的直方图。但是如果我有很多照片,那就需要很长时间
发布于 2012-07-10 19:25:20
您可以对图像进行矢量化,使每一行都是一组RGB,然后使用cv::kmeans进行聚类,如下所示:
std::vector<cv::Mat> imgRGB;
cv::split(img,imgRGB);
int k=5;
int n = img.rows *img.cols;
cv::Mat img3xN(n,3,CV_8U);
for(int i=0;i!=3;++i)
imgRGB[i].reshape(1,n).copyTo(img3xN.col(i));
img3xN.convertTo(img3xN,CV_32F);
cv::Mat bestLables;
cv::kmeans(img3xN,k,bestLables,cv::TermCriteria(),10,cv::KMEANS_RANDOM_CENTERS );
bestLables= bestLables.reshape(0,img.rows);
cv::convertScaleAbs(bestLables,bestLables,int(255/k));
cv::imshow("result",bestLables);
cv::waitKey();https://stackoverflow.com/questions/11411889
复制相似问题