为了能到远方,脚下的每一步都不能少.|

lmyyyy

园龄:2年8个月粉丝:7关注:10

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)

20239月(5)
20238月(6)
20237月(1)
202211月(2)
202210月(1)
20227月(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 中国大陆许可协议进行许可。

posted @   lmyyyy  阅读(31)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起