我觉得我有一个非常典型的图像比较问题,我的谷歌没有透露答案。
我想每 X 秒传输一次桌面的静止图像。目前,如果新旧图像相差一个像素,我们就会发送一张新图像。通常只有一些非常小的更改,例如时钟或图标,如果我可以将更改的部分发送到服务器并更新图像(带宽更少),那就太好了。
我设想的计划是获得一个已更改区域的矩形。例如,如果时钟发生变化,屏幕捕获包含变化的最小矩形,并将其连同其 (x, y) 坐标发送到服务器。然后,服务器将通过在指定坐标处覆盖矩形来更新旧图像。
是否有任何算法或库可以实现这一点?我不希望它是完美的,假设我总是发送一个包含所有更改的矩形(即使许多更小的矩形会更有效)。
我的另一个想法是在保存为一系列转换的新旧图像之间进行比较。然后,我会将一系列转换发送到服务器,然后将其应用于旧图像以获取新图像。不确定这是否可能,只是一个想法。
有什么想法吗?我可以使用的库?
最佳答案
将上一帧的每个像素与下一帧的每个像素进行比较,并跟踪哪些像素发生了变化?
由于您只是在寻找一个包含所有更改的框,因此您实际上只需要跟踪 min-x、min-y (不一定来自同一像素),最大 x 和最大 y。这四个值将为您提供矩形的边缘。
请注意,这项工作(比较两帧)应该真正卸载到 GPU,GPU 可以比 CPU 快得多。
另请注意,您尝试做的本质上是一种本土的无损流视频压缩算法。使用现有库中的一个不仅会容易得多,而且可能性能更高。
关于algorithm - 如何获得两个图像之间的矩形差异区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777943/