前言 雖然已經正式轉JAVA了,但最近發現一個特別好的開源項目masuit,不僅提供很多簡便的功能,還有圖像的一些特殊操作功能。 之前我們比較圖片應該都是使用的openCV,不過這個masuit,看上去也不錯,而且代碼使用簡單,因此強烈推薦。 下麵就實現一個簡單圖像對比。 實現對比 首先添加引用ma ...
前言
雖然已經正式轉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秒以內。
註:此文章為原創,任何形式的轉載都請聯繫作者獲得授權並註明出處!
若您覺得這篇文章還不錯,請點擊下方的【推薦】,非常感謝!
https://www.cnblogs.com/kiba/p/18053616.html
https://www.cnblogs.com/kiba/