Pho*_*cUK 8 .net c# image-processing
我有两个非常相似的图像(具体来说,两个截图),我试图找到最好(最快)的方式来查找图像的哪些区域已经改变(作为代表不同区域的矩形阵列)
一些标准:
我有两个工作解决方案,但其中一个是逐个像素计算,这当然是非常慢的.另一方面,我尝试将两个图像分成不同大小的块并计算每个块的校验和,但这也很慢.
只是为那些想知道我正在构建什么的人 - 它是一种可以在没有任何插件的浏览器中使用的笨重(和较慢)的远程桌面.
小智 3
您需要逐个像素进行比较。我认为不应该这么慢。例如代码:
int size = 1920 * 1080 * 3;
byte[] image1 = new byte[size];
byte[] image2 = new byte[size];
byte[] diff = new byte[size];
var sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < size; i++)
{
diff[i] = (byte) (image1[i] - image1[i]);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Run Code Online (Sandbox Code Playgroud)
在我的笔记本电脑上运行大约需要 40 毫秒。如果只是灰度,则运行时间不到 20 毫秒。如果您使用真实图像数据,则diff[i] != 0将指示两个图像中的变化。
如果您使用Bitmap.GetPixel或其他慢速方法读取像素值,您的解决方案可能会很慢。如果是这种情况,我建议查找 Bitmap.LockBits或使用不安全的方法。
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |