zoukankan      html  css  js  c++  java
  • opencv实现canopy算法

    #include "stdafx.h"
    using namespace cv;
    
    int main(int argc, char** argv)
    {
        Mat img=imread("d:/pic/lena.jpg");
        imshow("src",img);
        CV_Assert(!img.empty());
        vector<Mat> planes;
        split(img,planes);
        int total=img.total();
        Mat p(total,3,CV_32F,Scalar::all(0));
        int i;
        for(i=0;i<total;i++)
        {
            p.at<float>(i,0)=planes[0].data[i];
            p.at<float>(i,1)=planes[1].data[i];
            p.at<float>(i,2)=planes[2].data[i];
        }
        RNG rng(12345);
        int num=0;  //canopy个数
        double t1=200.0,t2=100.0; //两个距离阈值
        vector<Mat> canopy(total); //canopy矩阵组
        while(!p.empty())
        {
            
            int r=p.rows;  //余下的数据的行数
            Mat temp;
            int k=rng.uniform(0,r);  //在余下的数据中随机抽选一个作为canopy中心
            cout<<"The rest of number of rows:  "<<r<<",    random:"<<k<<endl;
            for(i=0;i<r;i++)
            {
                double d=norm(p.row(k),p.row(i));  //计算选出点和其它点的距离
                if(d<=t1)
                    canopy[num].push_back(p.row(i));  //将距离小于t1的所有点放入到一个新的canopy中
                if(d>t2)
                    temp.push_back(p.row(i));     //更新数据
            }
            temp.copyTo(p);
            num++;
        }
        cout<<"the total number of canopy:"<<num<<endl; //最终类别数
        for(i=0;i<num;i++)
            cout<<"the number of "<<i+1<<"  class: "<<canopy[i].total()<<endl;
        waitKey(0);
        return 0;
    }
  • 相关阅读:
    黄金连分数
    第39级台阶
    四、绘图可视化之Seaborn
    三、绘图和可视化之matplotlib
    二、pandas入门
    python_111_动态导入模块
    爬虫_python3_抓取猫眼电影top100
    爬虫_python3_urllib
    python_112_网络编程 Socket编程
    python_111_异常处理
  • 原文地址:https://www.cnblogs.com/denny402/p/4669255.html
Copyright © 2011-2022 走看看