//#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <iostream>
#include "ImageUtility.h"
double mycompareHist( cv::InputArray _H1, cv::InputArray _H2, int method )
{
cv::Mat H1 = _H1.getMat(), H2 = _H2.getMat();
const cv::Mat* arrays[] = {&H1, &H2, 0};
cv::Mat planes[2];
cv::NAryMatIterator it(arrays, planes);
cv::Mat temp = it.planes[0];
double result = 0;
int j, len = (int)it.size;
CV_Assert( H1.type() == H2.type() && H1.type() == CV_32F );//opencv断言
double s1 = 0, s2 = 0, s11 = 0, s12 = 0, s22 = 0;
CV_Assert( it.planes[0].isContinuous() && it.planes[1].isContinuous() );
for( size_t i = 0; i < it.nplanes; i++, ++it )
{
const float* h1 = (const float*)it.planes[0].data;//指向图像数据的指针
const float* h2 = (const float*)it.planes[1].data;
len = it.planes[0].rows*it.planes[0].cols;
if( method == 1 )//CV_COMP_CHISQR
{
for( j = 0; j < len; j++ )
{
double a = h1[j] - h2[j];
double b = h1[j];
if( fabs(b) > DBL_EPSILON ) //对角化的精确度 (典型地, DBL_EPSILON=≈10-15 就足够了)。
result += a*a/b;
}
}
else if( method == 2)//CV_COMP_INTERSECT
{
for( j = 0; j < len; j++ )
result += std::min(h1[j], h2[j]);
}
}
return result;
}
void main()
{
cv::Mat image, compareimage1, compareimage2, compareimage3, compareimage4, compareimage5, compareimage6;
image = cv::imread("beach.jpg");
compareimage1 = cv::imread("dog.jpg");
compareimage2 = cv::imread("moose.jpg");
compareimage3 = cv::imread("bear.jpg");
compareimage4 = cv::imread("polar.jpg");
compareimage5 = cv::imread("lake.jpg");
compareimage6 = cv::imread("beach.jpg");
if(!image.data&&compareimage1.data&&compareimage2.data&&compareimage3.data&&compareimage4.data&&compareimage5.data)
return;
cv::namedWindow("image");
cv::imshow("image", image);
ImageComparator imgcom;
imgcom.SetReferenceImage(image);
std::cout<<"dog:";
std::cout<<imgcom.CompareImage(compareimage1)<<std::endl;
std::cout<<"moose:";
std::cout<<imgcom.CompareImage(compareimage2)<<std::endl;
std::cout<<"bear:";
std::cout<<imgcom.CompareImage(compareimage3)<<std::endl;
std::cout<<"polar:";
std::cout<<imgcom.CompareImage(compareimage4)<<std::endl;
std::cout<<"lake:";
std::cout<<imgcom.CompareImage(compareimage5)<<std::endl;
//std::cout<<"beach:";
//std::cout<<imgcom.CompareImage(compareimage6)<<std::endl;
ColorHistogram colhist;
cv::MatND hist1, hist2;
hist1 = colhist.getRGBHistogram(image);
hist2 = colhist.getRGBHistogram(compareimage2);
std::cout<<mycompareHist(hist1, hist2,2)<<std::endl;
cv::waitKey();
}
使用直方图比较检索相似图像
5星 · 超过95%的资源 需积分: 10 46 浏览量
2013-09-22
19:25:07
上传
评论
收藏 3KB RAR 举报
Fred_Yang2013
- 粉丝: 265
- 资源: 18
最新资源
- ### 1、项目介绍 本项目Scrapy进行数据爬取,并使用Django框架+PyEcharts实现可视化大屏 效果如下:
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- python烟花代码.rar
- 实验目的: 1.构建基于verilog语言的组合逻辑电路和时序逻辑电路; 2.掌握verilog语言的电路设计技巧 3.完成如
- 扩展卡尔曼滤波matlab仿真
- 3_base.apk.1
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈