OpenCV图像检索:比较直方图
2017-01-11 11:45
417 查看
基于内容的图像检索是计算机视觉的一个重要课题。直方图是标志图像内容的一种有效方式。仅仅通过比较两幅图像的直方图测量出它们的相似度,OpenCV在cv::compareHist函数实现了这些方法。
其中的method包括:
method – Comparison method that could be one of the following:
– CV_COMP_CORREL Correlation
– CV_COMP_CHISQR Chi-Square
– CV_COMP_INTERSECT Intersection
– CV_COMP_BHATTACHARYYA Bhattacharyya distance
– CV_COMP_HELLINGER Synonym for CV_COMP_BHATTACHARYYA
这里仅仅为测试算法实现,对这些方法的原理不作深究。
首先设定一副参考图像:
1#
蓝天,然后在一堆图像中,搜索相似图像。分别评估它们与参考图像的相似度。待搜索的图像为:
2#
3#
4#
5#
6#(太明显了。。)
相似度评估结果为:
实现代码:
//Compares two histograms. double compareHist(InputArray H1, InputArray H2, int method)
其中的method包括:
method – Comparison method that could be one of the following:
– CV_COMP_CORREL Correlation
– CV_COMP_CHISQR Chi-Square
– CV_COMP_INTERSECT Intersection
– CV_COMP_BHATTACHARYYA Bhattacharyya distance
– CV_COMP_HELLINGER Synonym for CV_COMP_BHATTACHARYYA
这里仅仅为测试算法实现,对这些方法的原理不作深究。
首先设定一副参考图像:
1#
蓝天,然后在一堆图像中,搜索相似图像。分别评估它们与参考图像的相似度。待搜索的图像为:
2#
3#
4#
5#
6#(太明显了。。)
相似度评估结果为:
实现代码:
//类声明文件 ImageComparator.h #pragma once #include"opencv2/opencv.hpp" #include"opencv2/core/core.hpp" #include"opencv2/highgui/highgui.hpp" //ColorHistogram.h参见另一篇博客:《OpenCV计算和显示图像直方图》 //http://blog.csdn.net/czl389/article/details/54317839 #include"ColorHistogram.h" class ImageComparator { private: int nbins;//直方图箱子数量 cv::Mat refH; cv::Mat inputH; ColorHistogram hist; public: ImageComparator() :nbins(8){} void setReferenceImage(const cv::Mat& image); double compare(const cv::Mat& image); ~ImageComparator(); };
//类实现文件 ImageComparator.cpp #include "ImageComparator.h" void ImageComparator::setReferenceImage(const cv::Mat& image) { hist.setSize(nbins); refH = hist.getHueHistogram(image,65); } double ImageComparator::compare(const cv::Mat& image) { inputH = hist.getHueHistogram(image,65); return cv::compareHist(refH,inputH,CV_COMP_INTERSECT); } ImageComparator::~ImageComparator() { }
//主文件 main.cpp //compareHist cv::Mat refImage = cv::imread("1.jpg"); cv::Mat input1 = cv::imread("2.jpg"); cv::Mat input2 = cv::imread("3.jpg"); cv::Mat input3 = cv::imread("4.jpg"); cv::Mat input4 = cv::imread("5.jpg"); cv::Mat input5 = cv::imread("6.jpg"); ImageComparator cmp; cmp.setReferenceImage(refImage); double rate = cmp.compare(refImage);//将参考图像与自身的相似度设为1; double rate1=cmp.compare(input1)/rate; double rate2 = cmp.compare(input2) / rate; double rate3 = cmp.compare(input3) / rate; double rate4 = cmp.compare(input4) / rate; double rate5 = cmp.compare(input5) / rate; std::cout << "similarity" << std::endl; std::cout <<"1# -> 1#: "<< "1.00" << std::endl << "2# -> 1#: " << rate1 << std::endl << "3# -> 1#: " << rate2 << std::endl << "4# -> 1#: " << rate3 << std::endl << "5# -> 1#: " << rate4 << std::endl << "6# -> 1#: " << rate5 << std::endl; std::cout << std::endl;
相关文章推荐
- [Linux]让进程在后台可靠运行的几种方法
- 大型网站运维探讨和心得
- vmware虚拟机Linux(redhat)上用户密码忘记了怎么办?
- Tomcat服务启动限制日志过大的方法、使用管理员启动,注册服务删除服务
- Linux下使用class_create,device_create自动创建设备文件结点
- linux統一设备模型
- linux之sort用法
- Linux下PostgreSQL 的安装与配置
- linux虚拟网卡实现-调试
- linux搭建svn版本控制器
- linux 搭建git远程库
- WINDOWS中tomcat改变内存大小
- -bash: start-all.sh: 未找到命令
- 在全新安装的IIS7下搭建网站,访问页面时出现错误信息,配置错误: 不能在此路径中使用此配置节。
- `View` has no propType for native prop `RCTView.flexBasis` of native type `CGFloat
- 每天一个linux命令(36):diff 命令
- MDaemon and Apache2
- docker镜像-运行
- java执行linux命令:head -n 80 /dev/urandom | tr -dc A-Za-z0-9 | head -c 168
- 【openGL】安装篇(上):Windows