- A+
所属分类:.NET技术
前言
虽然已经正式转JAVA了,但最近发现一个特别好的开源项目masuit,不仅提供很多简便的功能,还有图像的一些特殊操作功能。
之前我们比较图片应该都是使用的openCV,不过这个masuit,看上去也不错,而且代码使用简单,因此强烈推荐。
下面就实现一个简单图像对比。
实现对比
首先添加引用masuit,如下图:
代码如下,实现一个可以对比翻转,旋转的图片。
点击查看代码
using Masuit.Tools.Media; using SixLabors.ImageSharp; using System.Diagnostics; using SixLabors.ImageSharp.Processing; var sw = Stopwatch.StartNew(); string img1 = "img/img1.png"; string img2 = "img/img3.png"; var hasher = new ImageHasher(); var hash1 = hasher.DifferenceHash256(img1); var hashList = new List<ulong[]>(); hashList.Add(hash1); var sim = 0.85; using (var image1 = SixLabors.ImageSharp.Image.Load<SixLabors.ImageSharp.PixelFormats.Rgba32>(img1)) { var actions = new List<Action>(); //翻转委托 actions.Add(() => { using Image<SixLabors.ImageSharp.PixelFormats.Rgba32> clone = image1.Clone(c => c.Flip(FlipMode.Horizontal)); var flipH = clone.DifferenceHash256(); hashList.Add(flipH); }); actions.Add(() => { using var clone = image1.Clone(c => c.Flip(FlipMode.Vertical)); var flipV = clone.DifferenceHash256(); hashList.Add(flipV); }); //选择委托 actions.Add(() => { using var clone = image1.Clone(c => c.Rotate(90)); var rotate90 = clone.DifferenceHash256(); hashList.Add(rotate90); }); actions.Add(() => { using var clone = image1.Clone(c => c.Rotate(180)); var rotate180 = clone.DifferenceHash256(); hashList.Add(rotate180); }); actions.Add(() => { using var clone = image1.Clone(c => c.Rotate(270)); var rotate270 = clone.DifferenceHash256(); hashList.Add(rotate270); }); Parallel.Invoke(actions.ToArray()); var hash2 = hasher.DifferenceHash256(img2); var similar = hashList.Select(h => ImageHasher.Compare(hash2, h)).Max(); if (similar >= sim) { Console.WriteLine($"是一样的图片 similar:{similar}"); } else { Console.WriteLine($"不是一样的图片 similar:{similar}"); } using (var image2 = SixLabors.ImageSharp.Image.Load<SixLabors.ImageSharp.PixelFormats.Rgba32>(img2)) { Console.WriteLine($"比较图片信息--分辨率:{image2.Width}x{image2.Height},大小:{new FileInfo(img2).Length / 1024}KB"); } Console.WriteLine(sw.ElapsedMilliseconds + "ms"); Console.ReadKey(); }
测试运行
这里使用三张图片对比,如下:
第一张是原图,第二张是略微裁剪边缘的图片,第三张是旋转图片。
1图和2图比较结果如下:
1图和3图比较结果如下:
代码简单实用,非常值得使用,比较速度也很快,大概在1秒以内。
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!