C#实现图片对比-支持图片旋转

打印 上一主题 下一主题

主题 877|帖子 877|积分 2631

前言

虽然已经正式转JAVA了,但最近发现一个特殊好的开源项目masuit,不光提供很多轻便的功能,还有图像的一些特殊操纵功能。
之前我们比较图片应该都是使用的openCV,不外这个masuit,看上去也不错,而且代码使用简单,因此猛烈推荐。
下面就实现一个简单图像对比。
实现对比

首先添加引用masuit,如下图:

代码如下,实现一个可以对比翻转,旋转的图片。
点击查看代码
  1. using Masuit.Tools.Media;
  2. using SixLabors.ImageSharp;
  3. using System.Diagnostics;
  4. using SixLabors.ImageSharp.Processing;
  5. var sw = Stopwatch.StartNew();
  6. string img1 = "img/img1.png";
  7. string img2 = "img/img3.png";
  8. var hasher = new ImageHasher();
  9. var hash1 = hasher.DifferenceHash256(img1);
  10. var hashList = new List<ulong[]>();
  11. hashList.Add(hash1);
  12. var sim = 0.85;
  13. using (var image1 = SixLabors.ImageSharp.Image.Load<SixLabors.ImageSharp.PixelFormats.Rgba32>(img1))
  14. {
  15.     var actions = new List<Action>();
  16.     //翻转委托
  17.     actions.Add(() =>
  18.     {
  19.         using Image<SixLabors.ImageSharp.PixelFormats.Rgba32> clone = image1.Clone(c => c.Flip(FlipMode.Horizontal));
  20.         var flipH = clone.DifferenceHash256();
  21.         hashList.Add(flipH);
  22.     });
  23.     actions.Add(() =>
  24.     {
  25.         using var clone = image1.Clone(c => c.Flip(FlipMode.Vertical));
  26.         var flipV = clone.DifferenceHash256();
  27.         hashList.Add(flipV);
  28.     });
  29.     //选择委托
  30.     actions.Add(() =>
  31.     {
  32.         using var clone = image1.Clone(c => c.Rotate(90));
  33.         var rotate90 = clone.DifferenceHash256();
  34.         hashList.Add(rotate90);
  35.     });
  36.     actions.Add(() =>
  37.     {
  38.         using var clone = image1.Clone(c => c.Rotate(180));
  39.         var rotate180 = clone.DifferenceHash256();
  40.         hashList.Add(rotate180);
  41.     });
  42.     actions.Add(() =>
  43.     {
  44.         using var clone = image1.Clone(c => c.Rotate(270));
  45.         var rotate270 = clone.DifferenceHash256();
  46.         hashList.Add(rotate270);
  47.     });
  48.     Parallel.Invoke(actions.ToArray());
  49.     var hash2 = hasher.DifferenceHash256(img2);
  50.     var similar = hashList.Select(h => ImageHasher.Compare(hash2, h)).Max();
  51.     if (similar >= sim)
  52.     {
  53.         Console.WriteLine($"是一样的图片 similar:{similar}");
  54.     }
  55.     else
  56.     {
  57.         Console.WriteLine($"不是一样的图片  similar:{similar}");
  58.     }
  59.     using (var image2 = SixLabors.ImageSharp.Image.Load<SixLabors.ImageSharp.PixelFormats.Rgba32>(img2))
  60.     {
  61.         Console.WriteLine($"比较图片信息--分辨率:{image2.Width}x{image2.Height},大小:{new FileInfo(img2).Length / 1024}KB");
  62.     }
  63.     Console.WriteLine(sw.ElapsedMilliseconds + "ms");
  64.     Console.ReadKey();
  65. }
复制代码
测试运行

这里使用三张图片对比,如下:

第一张是原图,第二张是略微裁剪边缘的图片,第三张是旋转图片。
1图和2图比较结果如下:

1图和3图比较结果如下:

代码简单实用,非常值得使用,比较速度也很快,大概在1秒以内。
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!

若您以为这篇文章还不错,请点击下方的【推荐】,非常感谢!
https://www.cnblogs.com/kiba/p/18053616.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表