在OpenCV的k均值颜色分类(Color classification with k-means

2019-06-26 04:24发布

我想聚集了很多与图像的K-Means算法。 我想建立集群,使得每个集群表示主色或图像的色调。 我读过一些有关这在造纸用K-均值彩色图像聚类

是否有人有一个想法在OpenCV中做到这一点?

也许我可以比较每个图像的直方图。 但是,如果我有很多的图片需要花费很长的时间

Answer 1:

您可以矢量化图像所以每一行是一组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();


文章来源: Color classification with k-means in OpenCV