9月9日总结
使用
/// <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; }
比较结果
image
image
可以看出基本符合预期。
注意:由于直方图算法未考虑像素的空间位置,所以当图片旋转后,仍会被认为是同一个图
下面是将图片旋转后的计算结果,可以看到跟没有旋转时的计算结果一样
image
记录完毕~
上一篇C#结合OpenCVSharp4图片相似度识别
本文来自博客园,作者:宣君{https://www.nhit.icu/},转载请注明原文链接:https://www.cnblogs.com/ycit/p/17689380.html
关注我
收藏该文
4
0
posted @ 2023-09-09 13:43 宣君 阅读(198) 评论(0) 编辑 收藏 举报
发表评论
[Ctrl+Enter快捷键提交]
【推荐】阿里云-云服务器省钱攻略 :五种权益,限时发放,不容错过
Copyright © 2023 宣君
Powered by .NET 7.0 on Kubernetes
博客园 首页 新随笔 草稿箱 联系 订阅 管理
目录
C#结合OpenCVSharp4使用直方图算法比较图片相似度 1. 下载 OpenCVSharp4 2. 使用
Autumn Wonderland
10 Sept, 2023
<
2023年9月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔 我的评论 我的参与 最新评论 我的标签
最新随笔
1.C#结合OpenCVSharp4使用直方图算法比较图片相似度 2.C#结合OpenCVSharp4图片相似度识别 3.pentaho(keetle)使用手册 4..NET6.0实现IOC容器 5..NET6读取appsettings.json配置 6..NET Evolve 数据库版本管理工具 7.Vu3+Element-Plus根据路由配置生成菜单导航栏 8.Winform跨线程访问UI 9.pentaho(keetle)数据同步实践 10.DXP GridView 行右键菜单
我的标签
.NET(9) OpenCVSharp4(2) ETL(2) DXP(2) 前端(2) 大数据(2) .NET for Apache Spark(2) WinForm(1) Vue3(1) nrm(1) Evolve(1) Element-plus(1) C#(1) 算法(1) 分享(1)
积分与排名
积分 - 8010 排名 - 130207
随笔分类 (19)
大数据(4) 后端(10) 前端(2) 算法(1) 随笔分享(2)
随笔档案 (18)
2023年9月(5) 2023年8月(6) 2023年7月(1) 2022年11月(2) 2022年10月(1) 2022年7月(3)
阅读排行榜
1. .NET6.0实现IOC容器(1883) 2. .Net 一套接口多实现(1237) 3. C#获取文件MD5(1057) 4. .NET Evolve 数据库版本管理工具(879) 5. Winform跨线程访问UI(636)
评论排行榜
1. .NET6.0实现IOC容器(17) 2. .NET Evolve 数据库版本管理工具(10) 3. .Net 一套接口多实现(4) 4. Vu3+Element-Plus根据路由配置生成菜单导航栏(1) 5. DXP TreeList 目录树(1)
推荐排行榜
1. .NET6.0实现IOC容器(8) 2. Winform跨线程访问UI(7) 3. C#结合OpenCVSharp4使用直方图算法比较图片相似度(4) 4. C#结合OpenCVSharp4图片相似度识别(4) 5. .Net 一套接口多实现(4)
最新评论
1. Re:.NET6.0实现IOC容器 创建ServiceLoader 对象的那里, 只用了一层锁,锁里面没有再次判空. 多线程并发环境下会有线程安全问题. --afeizai 2. Re:.NET6.0实现IOC容器 C#(11)里面可以用required来区分,autofac对这个现在有支持 语法参考... --首席装逼官 3. Re:.NET6.0实现IOC容器 支持一下 --lwqblog 4. Re:.NET6.0实现IOC容器 .... 这不是标题党吗? 你只是实现了批量注入 哪里实现ioc容器了 不是用的官方提供的容器吗 --码农白里黑 5. Re:.NET6.0实现IOC容器 轻量级的也可以试试 --首席装逼官 6. Re:.NET6.0实现IOC容器 @兴想事成 spring boot 在属性注入和构造函数注入上反复横跳,导致大家也跟着反复横跳。net 党好像一直都是构造函数注入,或者参数注入。... --!!!!!!!!!!!!!!! 7. Re:.NET6.0实现IOC容器 1、net6.0缺少 Keyed Services,这个在net8中已经加上。 2、基本上所有的都是推荐构造注入,但是1、如果要修改一个需要注入的,要同时改构造函数,2、如果有十几个service需要... --首席装逼官 8. Re:.NET6.0实现IOC容器 @宣君 没毛病,多种实现方式也可以开拓思路嘛~... --小夜鲲 9. Re:.NET6.0实现IOC容器 看了下别人写的, 属性注入, 影响效率. 属性注入会对所有的实现类进行扫描.一般正确的做法就是 构造函数注入 --兴想事成 10. Re:.NET6.0实现IOC容器 666666666666666666666666666666666 --Nietz
本文作者:lmyyyy
本文链接:https://www.cnblogs.com/lmyy/p/17690907.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步