首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Imagemagick.Net检查模糊图像

如何使用Imagemagick.Net检查模糊图像
EN

Stack Overflow用户
提问于 2022-07-27 16:33:12
回答 1查看 273关注 0票数 2

我正在从事一个ASP.NetCore 5项目,该项目要求用户使用普通的文件选择器上传文档,因此在重新加载文档并将其保存到数据库之前,我必须检查用户正在上载的文档是否模糊。

我做了一些研究,发现imagemagick.net能帮我完成所有这些,但似乎找不到解决办法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-27 18:14:27

我只是在谷歌上搜索了一下,然后一起摆弄了一些Stackoverflow / Blog的答案:

代码语言:javascript
复制
public static class ImageExtensions
{
  // as seen here: https://pyimagesearch.com/2015/09/07/blur-detection-with-opencv/
  public static bool IsBlurry(this Image image, double threshold = 100.0)
  {
    var mat = GetMatFromSDImage(image);
    var varianceOfLaplacian = VarianceOfLaplacian(mat);
    return varianceOfLaplacian < threshold;
  }


  // as seen here: https://stackoverflow.com/questions/58005091/how-to-get-the-variance-of-laplacian-in-c-sharp
  private static double VarianceOfLaplacian(Mat mat)
  {
    using var laplacian = new Mat();
    CvInvoke.Laplacian(mat, laplacian, DepthType.Cv64F);
    var mean = new MCvScalar();
    var stddev = new MCvScalar();
    CvInvoke.MeanStdDev(laplacian, ref mean, ref stddev);
    return stddev.V0 * stddev.V0;
  }

  // as found here https://stackoverflow.com/questions/40384487/system-drawing-image-to-emgu-cv-mat
  private static Mat GetMatFromSDImage(Image image)
  {
    int stride = 0;
    Bitmap bmp = new Bitmap(image);

    System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height);
    System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);

    System.Drawing.Imaging.PixelFormat pf = bmp.PixelFormat;
    if (pf == System.Drawing.Imaging.PixelFormat.Format32bppArgb)
    {
      stride = bmp.Width * 4;
    }
    else
    {
      stride = bmp.Width * 3;
    }

    Image<Bgra, byte> cvImage = new Image<Bgra, byte>(bmp.Width, bmp.Height, stride, (IntPtr)bmpData.Scan0);

    bmp.UnlockBits(bmpData);

    return cvImage.Mat;
  }
}

我注意到了代码片段的起源,因为这里没有实现任何东西;)它确实需要Emgu.CV包,而不是imagemagick。

我希望这有帮助,它通过了几个测试,我刚刚做到了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73141581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档