algorithm - 如何获得两个图像之间的矩形差异区域?

标签 algorithm image image-processing comparison image-comparison

我觉得我有一个非常典型的图像比较问题,我的谷歌没有透露答案。

我想每 X 秒传输一次桌面的静止图像。目前,如果新旧图像相差一个像素,我们就会发送一张新图像。通常只有一些非常小的更改,例如时钟或图标,如果我可以将更改的部分发送到服务器并更新图像(带宽更少),那就太好了。

我设想的计划是获得一个已更改区域的矩形。例如,如果时钟发生变化,屏幕捕获包含变化的最小矩形,并将其连同其 (x, y) 坐标发送到服务器。然后,服务器将通过在指定坐标处覆盖​​矩形来更新旧图像。

是否有任何算法或库可以实现这一点?我不希望它是完美的,假设我总是发送一个包含所有更改的矩形(即使许多更小的矩形会更有效)。

我的另一个想法是在保存为一系列转换的新旧图像之间进行比较。然后,我会将一系列转换发送到服务器,然后将其应用于旧图像以获取新图像。不确定这是否可能,只是一个想法。

有什么想法吗?我可以使用的库?

最佳答案

将上一帧的每个像素与下一帧的每个像素进行比较,并跟踪哪些像素发生了变化?

由于您只是在寻找一个包含所有更改的框,因此您实际上只需要跟踪 min-x、min-y (不一定来自同一像素),最大 x 和最大 y。这四个值将为您提供矩形的边缘。


请注意,这项工作(比较两帧)应该真正卸载到 GPU,GPU 可以比 CPU 快得多。

另请注意,您尝试做的本质上是一种本土的无损流视频压缩算法。使用现有库中的一个不仅会容易得多,而且可能性能更高。

关于algorithm - 如何获得两个图像之间的矩形差异区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777943/

相关文章:

opencv - ffmpeg 将可变帧率 .webm 转换为恒定帧率视频

algorithm - 哈希表加载因子 a 和 n 槽,冲突的开放寻址

Javascript从坐标数组中的某个坐标找到最远的坐标

使用 Gabor 滤波器的图像纹理特征

android - 从 YV12 或 NV12 字节数组裁剪图像

android - 如何在图像位图上绘制标签?

javascript - 编写回退选择器的更好方法?

algorithm - 字符串到唯一整数哈希

c# - 错误 : A const field of a reference type other than string can only be initialized with null

java - 在java中为不同类型和策略设计api