gpt4 book ai didi

c# - 快速计算两个相似图像之间的 'dirtied' 区域

转载 作者:太空狗 更新时间:2023-10-29 19:39:36 24 4
gpt4 key购买 nike

我有两张非常相似的图片(具体来说,是两张截图),我正试图找到最好(最快)的方法来查找图片的哪些区域发生了变化(作为代表不同区域的矩形数组)

一些标准:

  • 它不需要像素精确,但必须包括所有变化,无论多么小(即,单个像素变化周围有很大误差是可以接受的)
  • 它需要快速(理想情况下,在今天购买的典型消费类机器上,2x 1920x1080 图像应该花费 < 20 毫秒)
  • 它不需要可配置的阈值(但如果有一个解决方案允许这样做,那将是一个不错的奖励)
  • 可以假设输入图像总是完美的无损图像。

我有两个可行的解决方案,但一个是强力逐像素计算,这当然非常慢。对于另一个,我尝试将两个图像分成不同大小的 block 并计算每个 block 的校验和,但这也很慢。

只是为了那些想知道我正在构建什么的人 - 它是一种更笨(更慢)的远程桌面,可以在浏览器中使用而无需任何插件。

最佳答案

您需要对每个像素进行一个像素比较。我认为它不应该那么慢。例如代码:

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

在我的笔记本电脑上运行大约 40 毫秒。如果它只是灰度,它运行不到 20 毫秒。如果您使用真实图像数据,diff[i] != 0 将指示两个图像发生变化。

如果您使用 Bitmap.GetPixel 或其他慢速方法读取像素值,您的解决方案可能会很慢。如果是这种情况,我建议查看 Bitmap.LockBits 或使用不安全的方法。

关于c# - 快速计算两个相似图像之间的 'dirtied' 区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11931960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com