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

这篇具有很好参考价值的文章主要介绍了C#实现图片对比-支持图片旋转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

实现对比

首先添加引用masuit,如下图:
C#实现图片对比-支持图片旋转

代码如下,实现一个可以对比翻转,旋转的图片。

点击查看代码

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();

}


测试运行

这里使用三张图片对比,如下:
C#实现图片对比-支持图片旋转

第一张是原图,第二张是略微裁剪边缘的图片,第三张是旋转图片。

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

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

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

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


代码简单实用,非常值得使用,比较速度也很快,大概在1秒以内。


注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!


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


若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

https://www.cnblogs.com/kiba/p/18053616.html文章来源地址https://www.toymoban.com/news/detail-837598.html

到了这里,关于C#实现图片对比-支持图片旋转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包