opencv 暴力线性查找,kmeans查找,LSH查找

来源:互联网 发布:js点击显示更多 编辑:程序博客网 时间:2024/04/29 16:24

opencv 暴力线性查找,kmeans查找与LSH查找测试。

#include <stdio.h>#include <sys/time.h>#include <iostream>#include "opencv2/opencv.hpp"using namespace std;using namespace cv;inline timeval cpu_time(){    timeval t1;    gettimeofday(&t1,NULL);    return t1;}inline double cost_time(timeval t1,timeval t2){    double t = 1000*(t2.tv_sec-t1.tv_sec)+(t2.tv_usec-t1.tv_usec)/1000;    return t;}void generate_data(Mat& data){    int DIM = 1024;    int samples = 50000;    RNG rng((unsigned int)time(NULL));    //generate data randomly    data.create(samples,DIM,CV_32FC1);    Point center;    center.x = rng.uniform(0,data.cols);    center.y = rng.uniform(0, data.rows);    rng.fill(data, RNG::NORMAL, Scalar(center.x,center.y), Scalar(data.cols*0.05,data.rows*0.05));    //cout<<data<<endl;        //data.convertTo(data,CV_32FC1);}//lsh need data type:CV_8Uvoid lsh_search(const Mat& data,const Mat& point, Mat& indices, Mat& dists, const int k){    timeval t1,t2;    cout<<"Begin build LSHindex: "<<endl;   // t1 = cpu_time();    flann::Index flannIndex(data,flann::LshIndexParams(10,20,2),cvflann::FLANN_DIST_EUCLIDEAN);    flannIndex.save("lshIndex.xml");   // t2 = cpu_time();    cout<<"Finish build LSHindex: \n";//<<cost_time(t1,t2)<<"ms"<<endl;    t1 = cpu_time();    flannIndex.knnSearch(point, indices, dists, k,flann::SearchParams(64));    t2 = cpu_time();    cout<<"Finish lshSearch: "<<cost_time(t1,t2)<<"ms"<<endl;}//linear need data type: CV_32FC1void linear_search(const Mat& data,const Mat& point, Mat& indices, Mat& dists, const int k){    //data.convertTo(data,CV_32FC1);    timeval t1,t2;    flann::Index flannIndex(data,flann::LinearIndexParams(),cvflann::FLANN_DIST_EUCLIDEAN);    t1 = cpu_time();    cout<<"Begin LinearSearch: "<<endl;    flannIndex.knnSearch(point, indices, dists, k, flann::SearchParams(64));    t2 = cpu_time();    cout<<"Finish linearSearch: "<<cost_time(t1,t2)<<"ms"<<endl;}//kmeans need data type CV_32FC1void kmeans_search(const Mat& data,const Mat& point, Mat& indices, Mat& dists, const int k){    timeval t1,t2;    cout<<"Begin build kmeansIndex "<<endl;    flann::Index flannIndex(data,flann::KMeansIndexParams(64,-1),cvflann::FLANN_DIST_EUCLIDEAN);    cout<<"Finish build kmeansIndex"<<endl;    t1 = cpu_time();    cout<<"Begin KmeansSearch: "<<endl;    flannIndex.knnSearch(point, indices, dists, k, flann::SearchParams(64));    t2 = cpu_time();    cout<<"Finish KmeansSearch: "<<cost_time(t1,t2)<<"ms"<<endl;}int main(){    //Mat data = generate_data();    Mat data;    generate_data(data);    int k = 5;//knn    Mat indices(1,k,CV_32SC1);    Mat point = data.row(1).clone()+0.1;    Mat dists(point.rows,k,CV_64FC1);    linear_search(data,point,indices,dists,k);    cout<<indices<<endl;    cout<<dists<<endl;    kmeans_search(data,point,indices,dists,k);    cout<<indices<<endl;    cout<<dists<<endl;    data.convertTo(data,CV_8U);    point.convertTo(point,CV_8U);    lsh_search(data,point,indices,dists,k);    cout<<indices<<endl;    cout<<dists<<endl;    return 0;}
0 0