二维直方图及其比较

创建图像的HSV空间的H和S二维直方图并比较直方图相似度:

代码:

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <iostream>
CvHistogram* Histogram2D(IplImage* src,int HSize,int SSize)
{
IplImage* SrcH=cvCreateImage(cvGetSize(src),8,1);
IplImage* SrcS=cvCreateImage(cvGetSize(src),8,1);
IplImage* SrcV=cvCreateImage(cvGetSize(src),8,1);
IplImage* SrcHSV=cvCreateImage(cvGetSize(src),8,3);
cvZero(SrcH);
cvZero(SrcS);
cvZero(SrcV);
cvZero(SrcHSV);
//转换BGR到HSV
cvCvtColor(src,SrcHSV,CV_BGR2HSV);
//分割HSV
cvSplit(SrcHSV,SrcH,SrcS,SrcV,NULL);
//创建histogram
CvHistogram* hist;
int dims=2;
int size[]={HSize,SSize};
float HRange[]={0,180};
float SRange[]={0,255};
float *ranges[]={HRange,SRange};
hist=cvCreateHist(dims,size,CV_HIST_ARRAY,ranges,1);
//计算histogram
IplImage* image[]={SrcH,SrcS};
cvCalcHist(image,hist);
//归一化histogram
cvNormalizeHist(hist,1.0);  //即直方图所有值加起来为1
return hist;  //返回的是归一化的直方图
}
int histogram(int argc,char** argv)
{
int HSize=30;
int SSize=32;
IplImage* src=cvLoadImage("e:\\picture\\4.jpg");
IplImage* src2=cvLoadImage("e:\\picture\\444.jpg");
CvHistogram* hist=Histogram2D(src,HSize,SSize);
CvHistogram* hist2=Histogram2D(src2,HSize,SSize);
//创建直方图图像
int scale=10;
IplImage* HistImage=cvCreateImage(cvSize(HSize*scale,SSize*scale),8,3);
IplImage* HistImage2=cvCreateImage(cvSize(HSize*scale,SSize*scale),8,3);
//获取直方图最大值
float MaxHistValue=0;
cvGetMinMaxHistValue(hist,NULL,&MaxHistValue);
float MaxHistValue2=0;
cvGetMinMaxHistValue(hist2,NULL,&MaxHistValue2);
//画直方图图像
for(int h=0;h<HSize;h++)
{
for(int s=0;s<SSize;s++)
{
float data=cvQueryHistValue_2D(hist,h,s);
int result=cvRound(data*255/MaxHistValue); //把最大值扩展到255
cvRectangle(HistImage,cvPoint(h*scale,s*scale),cvPoint((h+1)*scale-1,(s+1)*scale-1),cvScalar(result,result,result),CV_FILLED);
}
}
for(int h=0;h<HSize;h++)
{
for(int s=0;s<SSize;s++)
{
float data=cvQueryHistValue_2D(hist2,h,s);
int result=cvRound(data*255/MaxHistValue2); //把最大值扩展到255
cvRectangle(HistImage2,cvPoint(h*scale,s*scale),cvPoint((h+1)*scale-1,(s+1)*scale-1),cvScalar(result,result,result),CV_FILLED);
}
}
//比较两个直方图
double CompareResult=cvCompareHist(hist,hist2,CV_COMP_BHATTACHARYYA);//CV_COMP_BHATTACHARYYA方法完全匹配是0,完全不匹配是1
std::cout<<"compare hist result is:"<<CompareResult<<std::endl;
cvNamedWindow("src");
cvNamedWindow("src2");
cvNamedWindow("HistImage");
cvNamedWindow("HistImage2");
cvShowImage("src",src);
cvShowImage("src2",src2);
cvShowImage("HistImage",HistImage);
cvShowImage("HistImage2",HistImage2);
cvWaitKey(0);
return 0;
}

二维直方图及其比较

时间: 2024-10-13 10:39:11

二维直方图及其比较的相关文章

matlab画二维直方图以及双y轴坐标如何修改另一边y轴的颜色

1.首先讲一下如何用hist画二维直方图 1 x=[-568179 -766698 -935586 -826865 -393971 -771826 -1529945 -1910695 -1694740 -926367 -306998 -844840 -1828334 -2062815 -2297296 -1498824 -411346 -827922 -1826636 -1844777 -1862918 -1881060 -746534 -100479 -845832 -1832756 -194

图像检索:二维直方图+flann+KNN+欧几里得距离

第一步:批处理提取图像库的二维直方图,并存在到.xml中的featureHists中 [ 第一个参数:图像的路径 目录.txt 第二个参数:图像特征   features.xml [保存到features.xml中featureHists] ] #include<iostream> #include<fstream> #include<string> using namespace std; #include<opencv2\imgproc\imgproc.hpp

图像检索:二维直方图+EMD距离

#include<iostream> #include<fstream> #include<map> #include<string> using namespace std; #include<opencv2\core\core.hpp> #include<opencv2\highgui\highgui.hpp> #include<opencv2\imgproc\imgproc.hpp> using namespace

二维码扫码积分系统定制开发

微信积分系统 二维码扫码积分系统定制开发找丽姐[158.1816.6626/电微]二维码营销模式系统定制开发 微信扫二维码营销系统开发 扫码领积分系统开发 一.如何实现扫二维码领红包功能? 1.使用扫描二维码领取红包对活动进行设置,包括红包数量.红包金额.促销地区.中奖概率等. 2.将生成的二维码赋到商品上面并赋涂层,一方面可以起到保证二维码的一次性,另一方面也可以引起消费者的好奇心. 3.通过手机微信打开扫一扫,扫码商品二维码关注公众号并领取红包,如果参与分享还可以获得抽奖的机会. 二.微信扫

微信生成二维码 只需一个网址即刻 还有jquery生成二维码

<div class="orderDetails-info"> <img src="http://qr.topscan.com/api.php?text=http://123.net/index.php?s=/Home/Index/yanzheng/mai/{$dange.id}" style="width: 5rem; margin-bottom: 1rem;" > </div> http://qr.tops

家电二维码售后服务平台系统开发

家电二维码售后服务平台系统开发,家电二维码售后系统开发,小吴183.2071.6434微电,家电二维码售后软件开发,家电二维码售后平台开发. 互联网平台的节点有两大类型:第一基数节点,也就是弱连接的节点,其规模要大,越大越好,互联网的价值与节点数的平比成正比.第二活跃节点,也就是强连接的节点,其能量要强,越强越好,互联网的价值与其强度成正比. 一.家电维修行业"维修黑幕"层出不穷 记者从一位从事家电维修人士那里了解到,目前行业公认当前家电维修行业有陷阱,"维修黑幕"

微信小程序(4)--二维码窗口

微信小程序二维码窗口: <view class="btn" bindtap="powerDrawer" data-statu="open">button</view> <!--mask--> <view class="drawer_screen" bindtap="powerDrawer" data-statu="close" wx:if=&qu

微信服务器与项目服务器的交互(关注功能、微信扫描带参数二维码)

<?php /** * wechat php test */ //define your token define("TOKEN", "txtj"); $wechatObj = new wechatCallbackapiTest(); if (isset($_GET['echostr'])) { $wechatObj->valid(); }else{ $wechatObj->responseMsg(); } class wechatCallback

14-高效求最长公共子序列(二维数组存不下)

/*                                   See LCS again时间限制:1000 ms  |  内存限制:65535 KB难度:3 描述 There are A, B two sequences, the number of elements in the sequence is n.m; Each element in the sequence are different and less than 100000. Calculate the length