C#结合OpenCVSharp4使用直方图算法比较图片相似度
C#结合OpenCVSharp4使用直方图算法比较图片相似度
直方图有灰度直方图、颜色直方图,如果是灰度图像,那么就用灰度直方图,这里使用颜色直方图来计算两个图片的相似度。
这里只记录如何使用,至于算法原理,问就是不会。
直方图算法效率高,但精度不够,适合快速比较,例如以图搜图
1. 下载 OpenCVSharp4
通过NuGet包管理器进行下载。搜索OpenCVSharp4下载。可参考前一篇文章:C#结合OpenCVSharp4图片相似度识别
2. 使用
/// <summary>
/// 直方图相关性
/// 结果越接近1 则越相似
/// 图片相似度识别(精度不高,速度较快,可用于以图搜图)
/// </summary>
/// <param name="imgFile1"></param>
/// <param name="imgFile2"></param>
public double Compare_Hist(string imgFile1, string imgFile2)
{
var matA = Cv2.ImRead(imgFile1);
var matB = Cv2.ImRead(imgFile2);
// 拆分通道
Cv2.Split(matA, out Mat[] matA_S);
Cv2.Split(matB, out Mat[] matB_S);
//直方图的像素范围
Rangef[] histRange = { new Rangef(0, 256) };
//直方图数组大小
int[] histSize = { 256 };
//直方图输出数组
Mat hist_A = new Mat();
Mat hist_B = new Mat();
bool uniform = true, accumulate = false;
Cv2.CalcHist(matA_S, new int[] { 0, 1, 2 }, null, hist_A, 1, histSize, histRange, uniform, accumulate);
Cv2.CalcHist(matB_S, new int[] { 0, 1, 2 }, null, hist_B, 1, histSize, histRange, uniform, accumulate);
//归一化,排除图像分辨率不一致的影响
Cv2.Normalize(hist_A, hist_A, 0, 1, NormTypes.MinMax, -1, null);
Cv2.Normalize(hist_B, hist_B, 0, 1, NormTypes.MinMax, -1, null);
//相关性比较
var res = Cv2.CompareHist(hist_A, hist_B, HistCompMethods.Correl);
return res;
}
比较结果


可以看出基本符合预期。
注意:由于直方图算法未考虑像素的空间位置,所以当图片旋转后,仍会被认为是同一个图
下面是将图片旋转后的计算结果,可以看到跟没有旋转时的计算结果一样

记录完毕~
C#结合OpenCVSharp4使用直方图算法比较图片相似度的更多相关文章
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- webrtc QOS笔记一 Neteq直方图算法浅读
webrtc QOS笔记一 Neteq直方图算法浅读 目录 webrtc QOS笔记一 Neteq直方图算法浅读 Histogram Algorithm 获取目标延迟 遗忘因子曲线 想起博客园帐号了, ...
- iOS,OC,图片相似度比较,图片指纹
上周,正在忙,突然有个同学找我帮忙,说有个需求:图片相似度比较. 网上搜了一下,感觉不是很难,就写了下,这里分享给需要的小伙伴. 首先,本次采用的是OpenCV,图片哈希值: 先说一下基本思路: 1. ...
- atitit.图片相似度与图片查找的设计 获取图片指纹
atitit.图片相似度与图片查找的设计. 1. 两张图片相似算法 1 2. DCT(离散余弦变换(DiscreteCosineTransform))编辑 2 3. 编辑距离编辑 3 4. Java ...
- python 对比图片相似度
最近appium的使用越来越广泛了,对于测试本身而言,断言同样是很重要的,没有准确的断言那么就根本就不能称之为完整的测试了.那么目前先从最简单的截图对比来看.我这里分享下python的图片相似度的代码 ...
- 通过CSS3实现:鼠标悬停图片360度旋转效果
效果很好玩,代码很简单: 效果: 鼠标放置在图片上:360度顺时针旋转 鼠标离开图片:图片260度逆时针旋转 只要将下面代码拷贝过去,并将图片改成你想要的就可以看到效果 <!doctype ht ...
- Android实现图片相似度
Android实现图片相似度 最近公司有一个需求,就是希望能判断用户提交的照片是否是身份证的正面或者反面.可以通过预设一张拍摄清晰的身份证正面或者反面,来对比是否相似,那么问题就转化为如何计算两张图片 ...
- C#图片处理之:旋转图片90度的整数倍
原文:C#图片处理之:旋转图片90度的整数倍 旋转图片90的整数倍那真是太简单了. public static Bitmap KiRotate90(Bitmap img) ...
- 原生Js封装的产品图片360度展示
挺简单的一段程序,但是效果不错: 1.把需要展示的36张图片先预加载到浏览器缓存里 2.给展示图片的div添加方法 3.通过鼠标左右移动的像素转换图片 在线效果预览:http://jsfiddle.n ...
随机推荐
- js代理(Proxy) 和 反射(Reflection)
在实际开发中经常会遇到js抛出的错误,但是我们有没有想过自己去接管js异常验证,根据自己的需求抛出异常呢?原本也许不行,但是在es6出来后就可以做到了 一.代理(Proxy) 什么是'代理' 呢?代理 ...
- 【lwip】14-TCP协议分析之TCP协议之可靠传输的实现(TCP干货)
lwip_14_TCP协议之可靠传输的实现 前言 前面章节太长了,不得不分开. 这里已源码为主,默认读者已知晓概念或原理,概念或原理可以参考前面章节,有分析. 参考:李柱明博客:https://w ...
- docker容器中下载vim指令的速度特别慢,解决方案
1 首先要进入容器内执行,保存目前源 mv /etc/apt/sources.list /etc/apt/sources.list.bak 2修改源,由于docker默认没有vim的包 所以无法使用v ...
- ABP - 依赖注入(2)
依赖注入的使用 构造方法注入 这是将服务注入类的最常用方法,是将依赖项注入类的首选方式,也是微软推崇的模式.这样,除非提供了所有构造方法注入的依赖项,否则无法构造类,显示的声明了类必需的服务,使开发人 ...
- json数据的解析
php声明没有键的数组,用json_encode输出: $array=array("1","2","3"); echo json_encod ...
- C++面试八股文:static_cast了解一下?
某日二师兄参加XXX科技公司的C++工程师开发岗位第20面: 面试官:C++中支持哪些类型转换? 二师兄:C++支持C风格的类型转换,并在C++11引入新的关键字规范了类型转换. 二师兄:C++11引 ...
- 使用 Transformers 为多语种语音识别任务微调 Whisper 模型
本文提供了一个使用 Hugging Face Transformers 在任意多语种语音识别 (ASR) 数据集上微调 Whisper 的分步指南.同时,我们还深入解释了 Whisper 模型.Com ...
- 老生常谈:值类型 V.S. 引用类型
我在面试的时候经常会问一个问题:"谈谈值类型和引用的区别".对于这个问题,绝大部分人都只会给我两个简洁的答案:"值类型分配在栈中,引用类型分配在堆中",&quo ...
- Java 基础复习——StringBuffer 和 StringBuilder
StringBuffer 和 StringBuilder StringBuffer 类 简介 java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删 很多方法和 S ...
- httpx的两个坑(httpx.ReadTimeout; SSL: CERTIFICATE_VERIFY_FAILED)
关于python异步网络请求库httpx的两个坑 其一:httpx.ReadTimeout 实测发现,网络不稳定的情况下,极其容易出现该错误. 相对于requests库, httpx库是有默认的超时时 ...