首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于OpenCV的k-means颜色分类

基于OpenCV的k-means颜色分类
EN

Stack Overflow用户
提问于 2012-07-10 19:00:57
回答 1查看 6.8K关注 0票数 5

我想用K-Means算法对很多图像进行聚类。我想要设置群集,以便每个群集表示图像的主色或色调。我在报纸Colour Image Clustering using K-Means上读到过一些关于这方面的内容

有没有人有用OpenCV做这件事的想法?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-10 19:25:20

您可以对图像进行矢量化,使每一行都是一组RGB,然后使用cv::kmeans进行聚类,如下所示:

代码语言:javascript
复制
    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();
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11411889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档