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

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • NAT模式,主机无法ping虚拟机,虚拟机可以ping主机

    原因 xff1a 虚拟机指定的虚拟网络和本机网络连接中的虚拟网卡未对应 xff0c 或网段不一致 解决 xff1a 在网络连接中找用于虚拟NAT网络下的虚拟网卡 xff08 我这里是VMnet2 xff0c 也有可能是VMnet8 xff0
  • zeromq 利用protobuf通信

    利用zeromq进行编程时候 xff0c 服务器和客户端的通信 xff0c 利用protobuf时候 之前的项目里面 xff0c 需要对protobuf进行编码解码 其实并不需要如此繁琐 xff0c 直接利用 protobuf里面的 Mes
  • 游戏升级之路

    七十一雾央原创 转载请注明 http blog csdn net hust xy 楼主学习编程有两年了 xff0c 决定向游戏发展大概就是半年前了 xff0c 在这里总结一下游戏方面的学习经历过 xff0c 给初学的朋友们参考下 xff0c
  • windows7远程桌面访问ubuntu16.04

    1 安装xrdp sudo apt get install xrdp xff12 安装vnc4server sudo apt get install vnc4server 3 安装xubuntu desktop sudo apt get i
  • <1> GCC的源码安装

    当我们安装好操作系统基本自带了gcc的编译器 由于版本和root 权限的问题 我们希望在自己的目录下创建一个相对独立的environment 这样我们更新起来也会比较方便 要安装基本gcc 首先要gmp mpfr和mpc xff08 ftp
  • TouchGFX使用心得(8)——通配符的中文显示(呕心沥血)

    这里写目录标题 前言方法一需要注意的问题 xff08 非常重要 xff01 xff01 xff01 xff01 xff09 方法二官方文档具体操作加载二进制文件通配符的显示放入stm32 总结 前言 通配符的中文的显示是我一直很疑惑的 xf
  • 9月10日美团网2014校招研发笔试哈尔滨站

    1 链表翻转 给出一个链表和一个数k xff0c 比如链表1 2 3 4 5 6 xff0c k 61 2 xff0c 则翻转后2 1 4 3 6 5 xff0c 若k 61 3 翻转后3 2 1 6 5 4 xff0c 若k 61 4 x
  • 2014校园招聘京东软件开发类笔试(完整版)

    时间 xff1a 2013 9 10 2013 10 8 地点 xff1a 四川大学 天津大学 职位 xff1a 软件开发工程师岗 语言 xff1a java 1 A 2 C 3 D 4 B 5 A 二 1 B 三1 D 2 B 3 C 4
  • 阅读科研文献心得分享(二)

    心得一 每天还保持读至少2 3篇的文献的习惯 读文献有不同的读法 但最重要的自己总结概括这篇文献到底说了什么 xff0c 否则就是白读 读的时候好像什么都明白 xff0c 一合上就什么都不知道 这是读文献的大忌 xff0c 既浪费时间 xf
  • 云数据库怎么挑选

    from http www chinacloud cn show aspx id 61 13222 amp cid 61 17 将数据库服务器在IaaS云上运行好吗 xff1f 或者应该转换成PaaS选择 xff1f 数据库即服务的选择可能
  • C# FTP操作(上传、下载等……)

    因为工作中经常涉及到FTP文件的上传和下载 xff0c 每次有这样的需求时都要重复编写相同的代码 xff0c 后来干脆整理一个FTPClass xff0c 这样不仅方便自己使用 xff0c 也可以共享给部门其它同事 xff0c 使用时直接调
  • 通过tasksel一键下载lamp(未成功)

    首先可以通过apt安装tasksel 安装 xff1a sudo apt install tasksel 通过taskel的方式安装lamp server全包 taskel的安装方式和apt get的有类似但是还是有区别个人觉得他像是apt
  • qemu创建快照后删除快照导致qemu crashed的BUG

    问题描述 启动一个虚拟机 创建三个快照 删除第一个快照时报错 合并磁盘失败 通过测试 创建虚拟机 ubuntu1604 win7 启动虚拟机 创建两个快照 删除第一个快照 瘦终端自自动关闭 vdsm报错如下 2018 07 20 17 00
  • 群晖docker容器内配置ubuntu远程桌面访问

    群晖docker容器内配置ubuntu远程桌面访问 当希望在群晖docker内的ubuntu开启远程桌面访问时 xff0c 和一般云服务器桌面安装方式还是有所区别 这里ubuntu的版本为14 04 LTS xff0c 由于nas性能较弱
  • Elasticsearch 7.6.0 最详细安装及配置(HA)安装与启动

    Elasticsearch 7 6 0 最详细安装及配置 xff08 HA xff09 安装与启动 Elasticsearch是一个非常好用的搜索引擎 xff0c 和Solr一样 xff0c 他们都是基于倒排索引的 今天我们就看一看Elas
  • python装饰器

    今天看了一些函数装饰器的知识 xff0c 第一遍没看懂 xff0c 后来才一点点弄明白 首先 xff0c 函数也是对象 xff0c 所以可以返回函数 def hello func func是函数名 def h xff1a 在函数内部的函数
  • 杀死XVNC进程

    0 重设密码 root 64 yqrh5u2 vncpasswd Password Verify root 64 yqrh5u2 1 xff0c 启动和kill vncserver root 64 yqrh5u2 vncserver 1 N
  • Winform布局与控件自适应分辨率以及防止错位

    我们在开发winform时 xff0c 在屏幕分辨率显示设置100 下开发系统界面 xff0c 但是有的同学的分辨率缩放设置是125 甚至 150 xff0c 这时候我们的系统界面默认就会错位 xff0c 导致效果体验极差 接下来我们来看效
  • 查询性能优化的十条建议

    三个原则 1 单行访问是很慢的 最好读取的块中能尽可能包含多的所需要的行 xff0c 使用索引可以创建位置引用以提升效率2 按顺序访问范围数据是很快的 lt 原因一 gt 顺序I O不需要多次磁盘寻道 xff0c 比随机I O要快很多 lt
  • Linux 使用npm安装pnpm成功后提示“-bash: pnpm: command not found“

    前提 xff1a 安装好nodejs xff0c 并且使用以下命令创建了软连接 xff08 报错也是由于这个原因 xff09 建立node软链接 ln s usr local nodejs bin node usr local bin 建立

随机推荐

  • android studio编译时提示error please select android sdk

    在做项目时协同开发时遇到的问题 更新工程后编译提示该错误 错误原因是 xff0c 有人上传了修改的 iml文件 xff0c 此处为app iml将 lt orderEntry type 61 34 jdk 34 jdkName 61 34
  • CPU主频频率越高,手机运行速度就越快吗?

    本文链接 xff1a https blog csdn net openkado article details 24087305 问 xff1a CPU频率越高 xff0c 手机速度就越快吗 xff1f 1 7GHz处理器的手机肯定比1 2
  • 多核编程与单核多线程编程

    并发 xff1a 时间段内有很多的线程或进程在执行 xff0c 但何时间点上都只有一个在执行 xff0c 多个线程或进程争抢时间片轮流执行 并行 xff1a 时间段和时间点上都有多个线程或进程在执行 单核cpu的话只能是并发 xff0c 多
  • 多线程与单核cpu,多核cpu概念

    1 多线程在单核和多核CPU上的执行效率问题的讨论 a1 多线程在单cpu中其实也是顺序执行的 xff0c 不过系统可以帮你切换那个执行而已 xff0c 其实并没有快 xff08 反而慢 xff09 多个cpu的话就可以在两个cpu中同时执
  • 多CPU,多核,多进程,多线程以及进程和线程的简单理解以及区别

    当面临这些问题的时候 xff0c 有两个关键词无法绕开 xff0c 那就是并行和并发 首先 xff0c 要先了解几个概念 xff1a 1 进程是程序的一次执行 2 进程是资源分配的基本单位 3 一个进程可以包括多个线程 4 在单CPU计算机
  • 并行、并发,两者的区别

    并发和并行相似但又是两个不同的概念 xff0c 并行是指两个或者多个时间在同一时刻发生 xff0c 就好比如多个程序同时运行 而并发是指两个或者多个时间在同一时间间隔内发生 在多道程序环境下 xff0c 并发性是指在一段时间内宏观上有多个程
  • Ubuntu VNC安装与遇到的问题

    Linux下VNC server可选的很多 xff0c vnc4server tightvnc xff0c 我更喜欢tigervnc unity桌面环境在vnc中不能正常使用 xff0c 我翻遍互联网还是没找到很好的解决办法 xff0c 退
  • CPU的主频,总线频率和L2缓存对电脑的性能有哪些影响

    CPU是Central Processing Unit的缩写 xff0c 即中央处理器 CPU发展至今 xff0c 其中所集成的电子元件也越来越多 xff0c 上万个晶体管构成了CPU的内部结构 那么这上百万个晶体管是如何工作的呢 xff1
  • 寄存器(cpu工作原理)

    来源 xff1a 王爽老师的 汇编语言 1 一个典型的CPU由运算器 控制器 寄存器等器件组成 xff0c 这些器件靠内部总线相连 区别 xff1a 内部总线实现CPU内部各个器件之间的联系 外部总线实现CPU和主板上其它器件的联系 808
  • 寄存器、存储器、内存的区别

    从范围来看 xff0c 它们所指的范畴不一样 寄存器是中央处理器内的组成部份 它跟CPU有关 寄存器是有限存贮容量的高速存贮部件 xff0c 它们可用来暂存指令 数据和位址 在中央处理器的控制部件中 xff0c 包含的寄存器有指令寄存器 I
  • 寄存器(CPU的工作原理)

    通用寄存器 8086CPU有14个寄存器 xff0c 他们的名字称为诶 xff1a AX BX CX DX SI DI SP BP IP CS SS DS ES PSW 8086CPU所有的寄存器都是16位的 xff0c 可以存放两个字节
  • CPU,寄存器,内存三者的关系

    一 皇帝身边的小太监 寄存器 不知道什么是寄存器 xff1f 那见过太监没有 xff1f 没有 xff1f 其实我也没有 没见过不要紧 xff0c 见过就麻烦大了 xff0c 大家都看过古装戏 xff0c 那些皇帝们要阅读奏章的时候 xff
  • 内网和外网通信的问题

    各位大神 xff0c 我把两台电脑 xff0c 其中一台通过路由器映射了 xff0c 也就成为了所为的服务器了 xff0c 另一台也就是处在内网的 xff0c 也就是我们平时一般人的电脑 xff0c 也就是客户端了 xff0c 那么客户端是
  • OpenCV进行图像相似度对比的几种办法

    转载请注明出处 xff1a http blog csdn net wangyaninglm article details 43853435 xff0c 来自 xff1a shiter编写程序的艺术 对计算图像相似度的方法 xff0c 本文
  • Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后 xff0c 真心感觉python的功能实在太强大 xff0c 因此将这些文章总结一下 xff0c 建立一下自己的知识体系 当然了 xff0c 图像识别这个话题作为计算机科学的一个分支 xff0c
  • OpenCV进行图像相似度对比的几种办法

    1 直方图方法 方法描述 xff1a 有两幅图像patch 当然也可是整幅图像 xff0c 分别计算两幅图像的直方图 xff0c 并将直方图进行归一化 xff0c 然后按照某种距离度量的标准进行相似度的测量 方法的思想 xff1a 基于简单
  • 比较两幅图像的相似度

    现在以图搜图的功能比较火热 xff0c 很好奇其原理 简单的搜索学习得知 xff0c 实现相似图片搜索的关键技术是 感知哈希算法 xff0c 作用是对每一张图片按照某种规律生成一个对应的指纹字符串 比较不同图片之间的指纹字符串 xff0c
  • 查找文献方法整理

    1 dblp computer science bibliography 在搜索框查找文献关键字 xff0c 或文献标题 xff0c 右边可以筛选 找到想找的论文之后 xff0c 可以将鼠标移到view xff0c 找到原网站 有些网站可以
  • OpenCV进行图像相似度对比的几种办法

    平均哈希算法 实现步骤 缩小尺寸 xff1a 将图像缩小到8 8的尺寸 xff0c 总共64个像素 这一步的作用是去除图像的细节 xff0c 只保留结构 明暗等基本信息 xff0c 摒弃不同尺寸 比例带来的图像差异 xff1b 简化色彩 x
  • opencv学习笔记(六)直方图比较图片相似度

    opencv学习笔记 xff08 六 xff09 直方图比较图片相似度 opencv提供了API来比较图片的相似程度 xff0c 使我们很简单的就能对2个图片进行比较 xff0c 这就是直方图的比较 xff0c 直方图英文是histogra