使用
/// <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
标签:总结,容器,--,hist,Re,IOC,NET6.0
From: https://www.cnblogs.com/lmyy/p/17690907.html