#include <cv.h>
#include <highgui.h>
#include <iostream>
#include <windows.h>
#include <math.h>
using namespace std;
double colorMoment(const char* objFile,const char* libFile);
double colorMomentRGB(const char* objFile,const char* libFile);
int main()
{
const char* obj="C:\\Users\\qqf\\Desktop\\qimg0001.JPG";
const char* lib="C:\\Users\\qqf\\Desktop\\1000city\\qimage\\qimg0002.JPG";
cout<<colorMomentRGB(obj,lib);
system("pause");
return 0;
}
double colorMoment(const char* objFile,const char* libFile)
{
IplImage* obj=cvLoadImage(objFile,1); //读文件
IplImage* lib=cvLoadImage(libFile,1);
IplImage* obj_hsv=cvCreateImage(cvGetSize(obj),8,3); //映射到hsv空间
IplImage* lib_hsv=cvCreateImage(cvGetSize(lib),8,3);
cvCvtColor(obj,obj_hsv,CV_BGR2HSV);
cvCvtColor(lib,lib_hsv,CV_BGR2HSV);
IplImage* obj_h_plane=cvCreateImage(cvGetSize(obj),8,1); //获取hsv分量
IplImage* obj_s_plane=cvCreateImage(cvGetSize(obj),8,1);
IplImage* obj_v_plane=cvCreateImage(cvGetSize(obj),8,1);
IplImage* obj_planes[]={obj_h_plane,obj_s_plane};
cvCvtPixToPlane(obj_hsv,obj_h_plane,obj_s_plane,obj_v_plane,0);
IplImage* lib_h_plane=cvCreateImage(cvGetSize(lib),8,1);
IplImage* lib_s_plane=cvCreateImage(cvGetSize(lib),8,1);
IplImage* lib_v_plane=cvCreateImage(cvGetSize(lib),8,1);
IplImage* lib_planes[]={lib_h_plane,lib_s_plane};
cvCvtPixToPlane(lib_hsv,lib_h_plane,lib_s_plane,lib_v_plane,0);
int h_bins=16; //初始化hist
int s_bins=8;
int hist_size[]={h_bins,s_bins};
float h_ranges[]={0,180};
float s_ranges[]={0,255};
float* ranges[]={h_ranges,s_ranges};
CvHistogram* obj_hist=cvCreateHist(2,hist_size,CV_HIST_ARRAY,ranges,1);
CvHistogram* lib_hist=cvCreateHist(2,hist_size,CV_HIST_ARRAY,ranges,1);
cvCalcHist(obj_planes,obj_hist,0,0); //计算直方图
cvCalcHist(lib_planes,lib_hist,0,0);
double* h_obj=new double[h_bins];
double* s_obj=new double[s_bins];
double* h_lib=new double[h_bins];
double* s_lib=new double[s_bins];
memset(h_obj,0,h_bins*sizeof(double));
memset(s_obj,0,s_bins*sizeof(double));
memset(h_lib,0,h_bins*sizeof(double));
memset(s_lib,0,s_bins*sizeof(double));
for(int i=0;i<h_bins;i++)
for(int j=0;j<s_bins;j++)
{
double temp_obj=cvQueryHistValue_2D(obj_hist,i,j);
double temp_lib=cvQueryHistValue_2D(lib_hist,i,j);
h_obj[i]+=temp_obj;
s_obj[j]+=temp_obj;
h_lib[i]+=temp_lib;
s_lib[j]+=temp_lib;
}
double sum_h_obj=0; //求均值
double sum_h_lib=0;
double sum_s_obj=0;
double sum_s_lib=0;
for(int i=0;i<h_bins;i++)
{
sum_h_obj+=h_obj[i];
sum_h_lib+=h_lib[i];
}
for(int i=0;i<s_bins;i++)
{
sum_s_obj+=s_obj[i];
sum_s_lib+=s_lib[i];
}
double ave_h_obj=sum_h_obj/h_bins;
double ave_h_lib=sum_h_lib/h_bins;
double ave_s_obj=sum_s_obj/s_bins;
double ave_s_lib=sum_s_lib/s_bins;
double men2_h_obj=0; //求二阶矩
double men2_h_lib=0;
double men2_s_obj=0;
double men2_s_lib=0;
for(int i=0;i<h_bins;i++)
{
men2_h_obj+=(h_obj[i]-ave_h_obj)*(h_obj[i]-ave_h_obj);
men2_h_lib+=(h_lib[i]-ave_h_lib)*(h_lib[i]-ave_h_lib);
}
for(int i=0;i<s_bins;i++)
{
men2_s_obj+=(s_obj[i]-ave_s_obj)*(s_obj[i]-ave_s_obj);
men2_s_lib+=(s_lib[i]-ave_s_lib)*(s_lib[i]-ave_s_lib);
}
men2_h_obj=sqrt(men2_h_obj/h_bins);
men2_h_lib=sqrt(men2_h_lib/h_bins);
men2_s_obj=sqrt(men2_s_obj/s_bins);
men2_s_lib=sqrt(men2_s_lib/s_bins);
double men3_h_obj=0; //求三阶矩
double men3_h_lib=0;
double men3_s_obj=0;
double men3_s_lib=0;
for(int i=0;i<h_bins;i++)
{
men3_h_obj+=(h_obj[i]-ave_h_obj)*(h_obj[i]-ave_h_obj)*(h_obj[i]-ave_h_obj);
men3_h_lib+=(h_lib[i]-ave_h_lib)*(h_lib[i]-ave_h_lib)*(h_lib[i]-ave_h_lib);
}
for(int i=0;i<s_bins;i++)
{
men3_s_obj+=(s_obj[i]-ave_s_obj)*(s_obj[i]-ave_s_obj)*(s_obj[i]-ave_s_obj);
men3_s_lib+=(s_lib[i]-ave_s_lib)*(s_lib[i]-ave_s_lib)*(s_lib[i]-ave_s_lib);
}
men3_h_obj=pow(men3_h_obj,1.0/3);
men3_h_lib=pow(men3_h_lib,1.0/3);
men3_s_obj=pow(men3_s_obj,1.0/3);
men3_s_lib=pow(men3_s_lib,1.0/3);
double s=0.2*abs(ave_h_lib-ave_h_obj)+0.2*abs(ave_s_lib-ave_s_obj)+
0.4*abs(men2_h_lib-men2_h_obj)+0.4*abs(men2_s_lib-men2_s_obj)+
0.4*abs(men3_h_lib-men3_h_obj)+0.4*abs(men3_s_lib-men3_s_obj);
delete [] h_obj;
delete [] s_obj;
delete [] h_lib;
delete [] s_lib;
return s;
}
double colorMomentRGB(const char* objFile,const char* libFile)
{
IplImage* obj=cvLoadImage(objFile,1); //读入文件
IplImage* lib=cvLoadImage(libFile,1);
int r_bins=256;
int g_bins=256;
int b_bins=256;
int hist_r_size[]={r_bins};
int hist_g_size[]={g_bins};
int hist_b_size[]={b_bins};
float r_ranges[]={0,255};
float g_ranges[]={0,255};
float b_ranges[]={0,255};
float* ranges_r[]={r_ranges};
float* ranges_g[]={g_ranges};
float* ranges_b[]={b_ranges};
CvHistogram* obj_hist_r=cvCreateHist(1,hist_r_size,CV_HIST_ARRAY,ranges_r,1);
CvHistogram* obj_hist_g=cvCreateHist(1,hist_g_size,CV_HIST_ARRAY,ranges_g,1);
CvHistogram* obj_hist_b=cvCreateHist(1,hist_b_size,CV_HIST_ARRAY,ranges_b,1);
CvHistogram* lib_hist_r=cvCreateHist(1,hist_r_size,CV_HIST_ARRAY,ranges_r,1);
CvHistogram* lib_hist_g=cvCreateHist(1,hist_g_size,CV_HIST_ARRAY,ranges_g,1);
CvHistogram* lib_hist_b=cvCreateHist(1,hist_b_size,CV_HIST_ARRAY,ranges_b,1);
IplImage* obj_r_plane=cvCreateImage(cvGetSize(obj),8,1);
IplImage* obj_g_plane=cvCreateImage(cvGetSize(obj),8,1);
IplImage* obj_b_plane=cvCreateImage(cvGetSize(obj),8,1);
IplImage* lib_r_plane=cvCreateImage(cvGetSize(lib),8,1);
IplImage* lib_g_plane=cvCreateImage(cvGetSize(lib),8,1);
IplImage* lib_b_plane=cvCreateImage(cvGetSize(lib),8,1);
cvCvtPixToPlane(obj,obj_r_plane,obj_g_plane,obj_b_plane,0);
cvCvtPixToPlane(lib,lib_r_plane,lib_g_plane,lib_b_plane,0);
IplImage* obj_r_planes[]={obj_r_plane};
IplImage* obj_g_planes[]={obj_g_plane};
IplImage* obj_b_planes[]={obj_b_plane};
IplImage* lib_r_planes[]={lib_r_plane};
IplImage* lib_g_planes[]={lib_g_plane};
IplImage* lib_b_planes[]={lib_b_plane};
cvCalcHist(obj_r_planes,obj_hist_r,0,0);
cvCalcHist(obj_g_planes,obj_hist_g,0,0);
cvCalcHist(obj_b_planes,obj_hist_b,0,0);
cvCalcHist(lib_r_planes,lib_hist_r,0,0);
cvCalcHist(lib_g_planes,lib_hist_g,0,0);
cvCalcHist(lib_b_planes,lib_hist_b,0,0);
double* obj_r=new double[r_bins];
double* obj_g=new double[g_bins];
double* obj_b=new double[b_bins];
double* lib_r=new double[r_bins];
double* lib_g=new double[g_bins];
double* lib_b=new double[b_bins];
memset(obj_r,0,r_bins*sizeof(double));
memset(obj_g,0,g_bins*sizeof(double));
memset(obj_b,0,b_bins*sizeof(double));
memset(lib_r,0,r_bins*sizeof(double));
memset(lib_g,0,g_bins*sizeof(double));
memset(lib_b,0,b_bins*sizeof(double));
int i=0;
double obj_r_ave=0; //r通道均值
double lib_r_ave=0;
for(i=0;i<r_bins;i++)
{
obj_r[i]=cvQueryHistValue_1D(obj_hist_r,i);
obj_r_ave+=obj_r[i];
lib_r[i]=cvQueryHistValue_1D(lib_hist_r,i);
lib_r_ave+=lib_r[i];
}
obj_r_ave=obj_r_ave/r_bins;
lib_r_ave=lib_r_ave/r_bins;
double obj_g_ave=0; //g通道均值
double lib_g_ave=0;
for(i=0;i<g_bins;i++)
{
obj_g[i]=cvQueryHistValue_1D(obj_hist_g,i);
obj_g_ave+=obj_g[i];
lib_g[i]=cvQueryHistValue_1D(lib_hist_g,i);
lib_g_ave+=lib_g[i];
}
obj_g_ave=obj_g_ave/g_bins;
lib_g_ave=lib_g_ave/g_bins;
double obj_b_ave=0; //b通道均值
double lib_b_ave=0;
for(i=0;i<b_bins;i++)
{
obj_b[i]=cvQueryHistValue_1D(obj_hist_b,i);
obj_b_ave+=obj_b[i];
lib_b[i]=cvQueryHistValue_1D(lib_hist_b,i);
lib_b_ave+=lib_b[i];
}
obj_b_ave=obj_b_ave/b_bins;
lib_b_ave=lib_b_ave/b_bins;
double obj_r_moment2=0; //r通道二阶矩
double lib_r_moment2=0;
for(i=0;i<r_bins;i++)
{
obj_r_moment2+=(obj_r[i]-obj_r_ave)*(obj_r[i]-obj_r_ave);
lib_r_moment2+=(lib_r[i]-lib_r_ave)*(lib_r[i]-lib_r_ave);
}
obj_r_moment2=sqrt(obj_r_moment2/r_bins);
lib_r_moment2=sqrt(lib_r_moment2/r_bins
没有合适的资源?快使用搜索试试~ 我知道了~
图像识别的时候用到的颜色矩特征的提取算法
共15个文件
pdb:2个
manifest:1个
exe:1个
2星 需积分: 46 38 下载量 30 浏览量
2018-03-25
22:11:40
上传
评论 1
收藏 5.95MB ZIP 举报
温馨提示
图像识别的时候用到的颜色矩特征的提取算法是用C++实现的-Color moment feature extraction algorithm is used when the image recognition using C++
资源推荐
资源详情
资源评论
收起资源包目录
colorMoment.zip (15个子文件)
colorMoment-颜色矩
colorMoment.ncb 17.02MB
Debug
colorMoment.ilk 364KB
colorMoment.exe 40KB
colorMoment.pdb 835KB
colorMoment.suo 12KB
colorMoment
colorMoment.cpp 10KB
colorMoment.vcproj.qqf-PC.qqf.user 1KB
colorMoment.vcproj 4KB
Debug
vc90.idb 595KB
vc90.pdb 516KB
mt.dep 65B
BuildLog.htm 7KB
colorMoment.obj 78KB
colorMoment.exe.intermediate.manifest 621B
colorMoment.sln 899B
共 15 条
- 1
资源评论
- 加菲猫5022019-05-02代码是以前的,2011年的,可以参考一下,要用的话需要改写
qq_40221358
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功