前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#实现图片对比-支持图片旋转

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

作者头像
Kiba518
发布2024-03-06 08:32:48
2720
发布2024-03-06 08:32:48
举报
文章被收录于专栏:Kiba518

前言

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

实现对比

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

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

点击查看代码

代码语言:javascript
复制
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秒以内。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 实现对比
  • 测试运行
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档