【问题标题】:Color classification with k-means in OpenCV在 OpenCV 中使用 k-means 进行颜色分类
【发布时间】:2012-07-09 20:17:22
【问题描述】:

我想使用K-Means 算法对大量图像进行聚类。我想设置集群,以便每个集群代表图像的主色或色调。我在Colour Image Clustering using K-Means@

的论文中读到了一些关于此的内容

有人有想法在 OpenCV 中执行此操作吗?

也许我可以比较每张图片的直方图。但是如果我有很多照片,那需要很长时间

【问题讨论】:

    标签: opencv computer-vision cluster-analysis


    【解决方案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();
    

    【讨论】:

    • 谢谢你的这个sn-p。我也可以对颜色直方图进行聚类吗?
    • 我相信你可以,但是使用建议的代码你需要复制每个 bin N 次,当 N 是 bin 值时。
    猜你喜欢
    • 2012-03-23
    • 2018-01-12
    • 2017-03-22
    • 2016-07-28
    • 2012-03-24
    • 2013-09-08
    • 2014-12-30
    • 2017-05-29
    • 2015-01-16
    相关资源
    最近更新 更多