C# 判断两张图片是否一致的两种方法
来源:互联网 发布:桌面笔记软件 单机 编辑:程序博客网 时间:2024/05/23 15:41
一般的情况下,人们习惯的轮询图像中的每一个像素进行比对,如果出现一个像素点的不同则判断两张照片不一致。但这样做的缺点是显而易见的:大量的查询会显著拖慢系统速度,如果要比较的图像很多则可能导致系统挂掉。新的思路是把图像文件的数据流转化成一串Base64字串,然后只要比较这些字串就可以了。作者测试了256*256以下大小的一些图片,结果完全正确而且速度明显加快。来看他是如何实现的吧。
传统的像素比对方法:
private bool ImageCompareArray(Bitmap firstImage, Bitmap secondImage) { bool flag = true; string firstPixel; string secondPixel; if (firstImage.Width == secondImage.Width && firstImage.Height == secondImage.Height) { for (int i = 0; i < firstImage.Width; i++) { for (int j = 0; j < firstImage.Height; j++) { firstPixel = firstImage.GetPixel(i, j).ToString(); secondPixel = secondImage.GetPixel(i, j).ToString(); if (firstPixel != secondPixel) { flag = false; break; } } } if (flag == false) { return false; } else { return true; } } else { return false; } }
改良后的代码:
public static bool ImageCompareString(Bitmap firstImage, Bitmap secondImage) { MemoryStream ms = new MemoryStream(); firstImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png); String firstBitmap = Convert.ToBase64String(ms.ToArray()); ms.Position = 0; secondImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png); String secondBitmap = Convert.ToBase64String(ms.ToArray()); if (firstBitmap.Equals(secondBitmap)) { return true; } else { return false; } }
作者测试了大量图片,只要改动一个像素点,新方法都可以检测出不同。不过目前为止还没有对500*600分辨率以上的图像进行测试。
运行大量测试以后,Base64方法的平均测试速度为每对照片0.1s。但是,使用传统的数组方法快慢则随图片而有明显差别。如果是完全一致的图片需要平均每对1.8s,检测出不同则只需要平均每对0.05s。综合看来新方法在速度上具有优势。
- C# 判断两张图片是否一致的两种方法
- C# 判断两张图片是否一致,极快速。
- 判断两张图片一致
- ASP.NET 判断两张图片是否一致
- opencv3.0.0 for android .判断两张图片是否一致
- C# 合并两张图片的方法
- 如何实现“比较两张图片的相似度”,或者说“比较两张图片是否基本一致”的算法?
- 判断两张图片是否完全相同
- opencv 判断两张图片是否一样
- c#比较两张图片是否相同
- Opencv判断是否加载图片的两种方法
- C# 判断文件是否被占用的两种方法
- C# 判断文件是否被占用的两种方法
- C# 判断文件是否被占用的两种方法
- C#,ASP.NET判断两张图片是否相同
- swift 判断/比较两张图片是否相同
- PHP 比较两张图片是否相同方法
- 利用ConstantState判断两张图片是否为drawable中同一张图片
- Android 号码, 来电归属地 Jni 使用C++对二进制文件查询(二) C++实现篇
- Win7 USB接口无法使用/驱动错误/该设备无法启动。(代码10) 故障解决方法
- struts2学习笔记6--国际化
- 元数据介绍
- Android APK逆向工程/反编译总结
- C# 判断两张图片是否一致的两种方法
- 为 Windows 下的 PHP 安装 PEAR 和 PHPUnit
- 1214迅速地找出丑数
- ENCTYPE="multipart/form-data"介绍
- log4j介绍及配置详解
- quick-cocos2d-x使用luajit编译lua脚本
- jdbc 配置文件链接数据库
- 算法学习与实践之选择排序
- Servlet调用流程