阿里云建设网站教学,php网站中水印怎么做,想学做网站从哪里入手,wordpress怎么加咨询区 Byyo我在用 C# 实现一个可以查找重复图片的小工具#xff0c;我目前是给每一个图片做一个 md5 码#xff0c;然后通过 md5 值来判断图片是否相同。但现实情况要复杂的多#xff0c;比如#xff1a;图片被旋转了#xff0c;比如#xff1a;90图片大小不一致不同的压… 咨询区 Byyo我在用 C# 实现一个可以查找重复图片的小工具我目前是给每一个图片做一个 md5 码然后通过 md5 值来判断图片是否相同。但现实情况要复杂的多比如图片被旋转了比如90°图片大小不一致不同的压缩比例和后缀名请问是否有更好的方式来解决回答区 fubo这种比较图片是否相同的解决思路可以大概总结为下面四步。调整图片大小为 16x16 像素调整图片为 黑白 色这样就可以用 1/0 来表示。将行列的黑白点 读取到 List 中参考如下代码public static Listbool GetHash(Bitmap bmpSource)
{Listbool lResult new Listbool(); //create new image with 16x16 pixelBitmap 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然后再设置一个容忍值即可参考如下代码Listbool iHash1 GetHash(new Bitmap(C:\mykoala1.jpg));
Listbool 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 上。点评区 2013 年我在博客园写了一篇文章用的是 Aforge.NET 识别 得仕卡 官网上的验证码有兴趣的朋友可以去看一看参考文章https://www.cnblogs.com/huangxincheng/p/3495858.html 其实我也觉得场景允许建议还是用开源的工具包。