咨询区
- Byyo
md5
码,然后通过 md5 值来判断图片是否相同 。但现实情况要复杂的多,比如:
- 图片被旋转了,比如:90°
- 图片大小不一致
- 不同的压缩比例和后缀名
回答区
- fubo
- 调整图片大小为 16x16 像素
- 调整图片为
黑白
色,这样就可以用1/0
来表示 。
- 将行列的
黑白点
读取到List
中,参考如下代码:
public static List<bool> GetHash(Bitmap bmpSource){ List<bool> lResult = new List<bool>(); //create new image with 16x16 pixel Bitmap bmpMin = new Bitmap(bmpSource, new Size(16, 16)); for (int j = 0; j < bmpMin.Height; j++) { for (int i = 0; i < bmpMin.Width; i++) { //reduce colors to true / false lResult.Add(bmpMin.GetPixel(i, j).GetBrightness() < 0.5f); } } return lResult;}
我知道,GetPixel
方法性能不是很高 , 但在 16*16
像素场景下应该不会有性能问题 。- 比较两幅图片所生成的
List
, 然后再设置一个容忍值即可,参考如下代码:
List<bool> iHash1 = GetHash(new Bitmap(@"C:mykoala1.jpg"));List<bool> iHash2 = GetHash(new Bitmap(@"C:mykoala2.jpg"));//determine the number of equal pixel (x of 256)int equalElements = iHash1.Zip(iHash2, (i, j) => i == j).Count(eq => eq);
- Fab
EmguCV
,它是一个开源的C#实现的边缘检测和相关的计算机视觉算法 , 包装了用 C 和 C++ 实现 的 OpenCV
上 。推荐阅读
- 生成式人工智能如何重新定义图像搜索
- AI如何识别与理解图像
- 平时这么做,5个快速健康有效的减肥方法
- 大门如何旺风水
- 微信号改成什么比较有意义英文 微信号改成什么比较有意义
- 如何让住宅风水变好 调理住宅风水可增旺运势
- 如何自制灭蚊神器 夏天蚊子自制灭蚊神器
- 机票如何取消座位 机票取消座位保留机票怎么用
- 如何设置qq宠物 qq怎么设置宠物在身边
- 过年招财方法 2021年过年如何招财