opencv学习笔记(六)直方图比较图片相似度

  opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将图片转换成直方图,然后对直方图进行比较,在某些程度,真实地反映了图片的相似度。

代码如下:

 1 #include <iostream>2 #include <cv.h>3 #include <highgui.h>4 using namespace std;5 using namespace cv;6 7 int main(void)8 {9     Mat pic1 = imread("pic1.jpg");
10     Mat pic2 = imread("pic2.jpg");
11     //计算相似度
12     if (pic2.channels() == 1) {//单通道时,
13     int histSize = 256;
14     float range[] = { 0, 256 };
15     const float* histRange = { range };
16     bool uniform = true;
17     bool accumulate = false;
18
19     cv::Mat hist1, hist2;
20
21     cv::calcHist(&pic2, 1, 0, cv::Mat(), hist1, 1, &histSize, &histRange, uniform, accumulate);
22     cv::normalize(hist1, hist1, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());
23
24     cv::calcHist(&pic1, 1, 0, cv::Mat(), hist2, 1, &histSize, &histRange, uniform, accumulate);
25     cv::normalize(hist2, hist2, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());
26
27     double dSimilarity = cv::compareHist(hist1, hist2, CV_COMP_CORREL);//,CV_COMP_CHISQR,CV_COMP_INTERSECT,CV_COMP_BHATTACHARYYA    CV_COMP_CORREL
28
29     cout << "similarity = " << dSimilarity << endl;
30     }
31     else {//三通道时
32         cv::cvtColor(pic2, pic2, cv::COLOR_BGR2HSV);
33         cv::cvtColor(pic1, pic1, cv::COLOR_BGR2HSV);
34
35     int h_bins = 50, s_bins = 60;
36     int histSize[] = { h_bins, s_bins };
37     float h_ranges[] = { 0, 180 };
38     float s_ranges[] = { 0, 256 };
39     const float* ranges[] = { h_ranges, s_ranges };
40     int channels[] = { 0, 1 };
41
42     cv::MatND hist1, hist2;
43
44     cv::calcHist(&pic2, 1, channels, cv::Mat(), hist1, 2, histSize, ranges, true, false);
45     cv::normalize(hist1, hist1, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());
46
47     cv::calcHist(&pic1, 1, channels, cv::Mat(), hist2, 2, histSize, ranges, true, false);
48     cv::normalize(hist2, hist2, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());
49
50     double dSimilarity = cv::compareHist(hist1, hist2, CV_COMP_CORREL); //,CV_COMP_CHISQR,CV_COMP_INTERSECT,CV_COMP_BHATTACHARYYA  CV_COMP_CORREL
51
52     cout << "similarity = " << dSimilarity << endl;
53     }
54     waitKey(0);
55     return 1;
56
57 }

  pic1:

  

  pic2:

  

  使用相关系数法(CV_COMP_CORREL)进行图片相似度比较时,取值范围为[-1,1];越接近1说明两幅图片越相似;

  比较pic1与pic2得到的结果为:

  similarity =0.926247

  pic与本身进行比较时,

  similarity =1

转载于:https://www.cnblogs.com/codingmengmeng/p/5609036.html

opencv学习笔记(六)直方图比较图片相似度相关推荐

  1. python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化

    本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...

  2. opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  3. OpenCV学习笔记六-提高对比度

    提高像素对比度 P7 按像素提高图像的对比度#include<iostream> #include<opencv2/opencv.hpp>using namespace std ...

  4. opencv学习笔记(六)---图像梯度

    图像梯度的算法有很多方法:sabel算子,scharr算子,laplacian算子,sanny边缘检测(下个随笔)... 这些算子的原理可参考:https://blog.csdn.net/poem_q ...

  5. opencv学习笔记9:根据图片颜色分割图像

    根据图片颜色分割图像 程序目的 有一张图片,底色是蓝色的,感兴趣的区域是灰色的,需要对图片按颜色分割. 事实上按颜色分割图片在HSV通道上分割效果要远远优于在BGR通道上分割,如何获取某种颜色的HSV ...

  6. opencv学习笔记六十八:显示中文汉字

    opencv中putText只能显示英文,如果在某个程序中你想显示汉字,可在该项目上新建一个头文件项putText.h和一个putText.cpp即可. putText.h #ifndef PUTTE ...

  7. opencv学习笔记六十三:基于CNN的性别、年龄预测

    来自于2015年CVPR的一篇paper<Age and Gender Classification using Convolutional Neural Networks>. Paper ...

  8. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  9. OpenCV学习笔记(十六):直方图均衡化:equalizeHist()

    OpenCV学习笔记(十六):直方图均匀化:equalizeHist() 参考博客: 直方图均衡化的数学原理 直方图匹配的数学原理 直方图均衡化广泛应用于图像增强中: 直方图均衡化处理的"中 ...

最新文章

  1. java 类与对象题_Java 类与对象 编程练习题
  2. java点到原点距离_java-从经纬度坐标到欧氏距离(EuclideanDistance)完整代码
  3. Python模块和包
  4. 请求网页时,怎么给我返回了一段 JavaScript 代码
  5. fc588热敏打印机驱动_为称重仪表设计热敏打印模块 - 工业自动化称重仪表
  6. cocoapods 安装失败 ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension.
  7. Datatables+Bootstrap
  8. 谷粒商城:18.性能压测
  9. js 设置焦点 判断控件是否获得焦点 判断哪个控件获得焦点
  10. 关于ABAP调试中的F5,F6,F7,F8的区别和用法
  11. 划片机操作安全注意事项
  12. 2020-2021追番报告
  13. HDU1847:Good Luck in CET-4 Everybody!(SG博弈)
  14. 手机3D的新境界:Omnia II 是3D方面的力作!!
  15. CCF系列题解--2016年9月第四题 交通规划
  16. json在线编辑(xml转json,json视图,json格式检验,等等)神器
  17. FTP暴力破解登陆漏洞复现(Windows Server 2003)
  18. StarWind模拟iSCSI设备 [类似openfiler、FreeNAS]
  19. tkinter窗口预加载
  20. 开源操作系统 Redox ,你不来看看?

热门文章

  1. python递归求5!_用Python解数独[6]:递归获得最终答案
  2. 可以用计算机进行模拟实验,随着信息技术的发展,包括核实验在内的许多科学研究都可以用计算机进行模拟实验, - 问答库...
  3. linux系统在pe下查看ip地址,pe下查看原系统ip的方法_网站服务器运行维护
  4. java中launch方法,Java AppUtils.launchApp方法代码示例
  5. php+header+跳转输出,php利用header跳转怎么失效了?
  6. centos7中无法确定光盘权限怎么办_图解KVM安装CentOS7.6操作系统
  7. 戴尔win10插耳机还外放_通州附近戴尔笔记本电脑维修哪家强-北京信维佳业科技有限公司...
  8. 变局之际,聊聊物联网的过去、现在和未来
  9. vscode 设置缩进为4_VS Code 设置缩进为4个空格
  10. Java程序中AB类可调用_19年【石油大学】《Java语言程序设计》二次在线作业(100分)...