K-means in OpenCV

  • 5
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

STDINから(行)ベクトルの集合を受け取り、STDOUTに中心ベクトルを吐く。

#include <vector>#include <iostream>#include <sstream>#include <opencv2/opencv.hpp>using namespace std;int main(int argc, char** argv){
    int K = 10;    cv::BOWKMeansTrainer trainer(K);    std::string buf;    while(getline(cin, buf)){        stringstream ss(buf);        vector<float> feature;        float v;        while(ss >> v){            feature.push_back(v);        }        trainer.add(cv::Mat_<float>(feature).t());    }    cerr << "#features = " << trainer.descripotorsCount() << endl;    cv::Mat_<float> dictionary = trainer.cluster();    for(int y = 0; y < dictionary.rows; ++y){        for(int x = 0; x < dictionary.cols; ++x){            cout << dictionary(y, x) << "\t";        }        cout << endl;    }}