opencv学习笔记(六)直方图比较图片相似度
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学习笔记(六)直方图比较图片相似度相关推荐
- python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化
本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...
- opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- OpenCV学习笔记六-提高对比度
提高像素对比度 P7 按像素提高图像的对比度#include<iostream> #include<opencv2/opencv.hpp>using namespace std ...
- opencv学习笔记(六)---图像梯度
图像梯度的算法有很多方法:sabel算子,scharr算子,laplacian算子,sanny边缘检测(下个随笔)... 这些算子的原理可参考:https://blog.csdn.net/poem_q ...
- opencv学习笔记9:根据图片颜色分割图像
根据图片颜色分割图像 程序目的 有一张图片,底色是蓝色的,感兴趣的区域是灰色的,需要对图片按颜色分割. 事实上按颜色分割图片在HSV通道上分割效果要远远优于在BGR通道上分割,如何获取某种颜色的HSV ...
- opencv学习笔记六十八:显示中文汉字
opencv中putText只能显示英文,如果在某个程序中你想显示汉字,可在该项目上新建一个头文件项putText.h和一个putText.cpp即可. putText.h #ifndef PUTTE ...
- opencv学习笔记六十三:基于CNN的性别、年龄预测
来自于2015年CVPR的一篇paper<Age and Gender Classification using Convolutional Neural Networks>. Paper ...
- 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...
1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...
- OpenCV学习笔记(十六):直方图均衡化:equalizeHist()
OpenCV学习笔记(十六):直方图均匀化:equalizeHist() 参考博客: 直方图均衡化的数学原理 直方图匹配的数学原理 直方图均衡化广泛应用于图像增强中: 直方图均衡化处理的"中 ...
最新文章
- java 类与对象题_Java 类与对象 编程练习题
- java点到原点距离_java-从经纬度坐标到欧氏距离(EuclideanDistance)完整代码
- Python模块和包
- 请求网页时,怎么给我返回了一段 JavaScript 代码
- fc588热敏打印机驱动_为称重仪表设计热敏打印模块 - 工业自动化称重仪表
- cocoapods 安装失败 ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension.
- Datatables+Bootstrap
- 谷粒商城:18.性能压测
- js 设置焦点 判断控件是否获得焦点 判断哪个控件获得焦点
- 关于ABAP调试中的F5,F6,F7,F8的区别和用法
- 划片机操作安全注意事项
- 2020-2021追番报告
- HDU1847:Good Luck in CET-4 Everybody!(SG博弈)
- 手机3D的新境界:Omnia II 是3D方面的力作!!
- CCF系列题解--2016年9月第四题 交通规划
- json在线编辑(xml转json,json视图,json格式检验,等等)神器
- FTP暴力破解登陆漏洞复现(Windows Server 2003)
- StarWind模拟iSCSI设备 [类似openfiler、FreeNAS]
- tkinter窗口预加载
- 开源操作系统 Redox ,你不来看看?
热门文章
- python递归求5!_用Python解数独[6]:递归获得最终答案
- 可以用计算机进行模拟实验,随着信息技术的发展,包括核实验在内的许多科学研究都可以用计算机进行模拟实验, - 问答库...
- linux系统在pe下查看ip地址,pe下查看原系统ip的方法_网站服务器运行维护
- java中launch方法,Java AppUtils.launchApp方法代码示例
- php+header+跳转输出,php利用header跳转怎么失效了?
- centos7中无法确定光盘权限怎么办_图解KVM安装CentOS7.6操作系统
- 戴尔win10插耳机还外放_通州附近戴尔笔记本电脑维修哪家强-北京信维佳业科技有限公司...
- 变局之际,聊聊物联网的过去、现在和未来
- vscode 设置缩进为4_VS Code 设置缩进为4个空格
- Java程序中AB类可调用_19年【石油大学】《Java语言程序设计》二次在线作业(100分)...