opencv实现canopy算法
2024-10-10 23:45:12
#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,,CV_32F,Scalar::all());
int i;
for(i=;i<total;i++)
{
p.at<float>(i,)=planes[].data[i];
p.at<float>(i,)=planes[].data[i];
p.at<float>(i,)=planes[].data[i];
}
RNG rng();
int num=; //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(,r); //在余下的数据中随机抽选一个作为canopy中心
cout<<"The rest of number of rows: "<<r<<", random:"<<k<<endl;
for(i=;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=;i<num;i++)
cout<<"the number of "<<i+<<" class: "<<canopy[i].total()<<endl;
waitKey();
return ;
}
最新文章
- yii2分页的基本使用及其配置详解
- 【随笔】从gitHub上获取源码
- 有评论就是我最大的动力~MySQL基础篇完结(存储引擎和图形化管理工具)
- java操作小技巧,遇到过的会一直更新,方便查找
- POJ2396 Budget(有源汇流量有上下界网络的可行流)
- Python装饰模式实现源码分享
- bpl
- JSOI2008最大数(线段树)
- ASP.NET 导入excel 数据
- Windows Phone开发(32):路径之PathGeometry
- 洛谷 P3674 小清新人渣的本愿 [莫队 bitset]
- Nonlinear Component Analysis as a Kernel Eigenvalue Problem
- html之head标签
- 1010:Tempter of the Bone
- linux运行apache出现403错误
- 关于tomcat session机制梳理
- 「ZJOI2015」地震后的幻想乡
- python-面向对象-09_类属性和类方法
- windows上面非常好用的辅助软件
- git instaweb 500 error