我觉得我的图像比较有一个非常典型的问题,我的谷歌没有透露答案。
我想每X秒发送一次桌面静止图像。目前,如果新旧图像相差甚至一个像素,我们会发送新图像。通常只有非常小的变化,如时钟或图标,如果我可以将更改的部分发送到服务器并更新图像(减少带宽),那将会很棒。
我设想的计划是获得一个已经改变的区域的矩形。例如,如果时钟发生变化,屏幕将捕获包含更改的最小矩形,并将其与(x,y)坐标一起发送到服务器。然后,服务器将通过在指定的坐标处覆盖矩形来更新旧图像。
是否有任何算法或库可以实现此目的?我不希望它是完美的,让我说我总是发送一个包含所有变化的矩形(即使许多较小的矩形效率更高)。
我的另一个想法是在新旧图像之间进行差异,将其保存为一系列变换。然后,我只是将一系列转换发送到服务器,然后将其应用于旧图像以获取新图像。不确定这是否可行,只是一个想法。
有什么想法吗?我可以使用的库吗?
答案 0 :(得分:4)
将前一帧的每个像素与下一帧的每个像素进行比较,并跟踪哪些像素已发生变化?
由于您只想查找包含所有更改的单个框,因此您实际上只需要跟踪min-x,min-y (不一定来自同一像素), max-x和max-y。这四个值将为您提供矩形的边缘。
请注意,此作业(比较两个帧)应该真正卸载到GPU,这可以比CPU快得多。
另请注意,您尝试做的主要是本土无损流媒体视频压缩算法。使用现有库中的一个不仅容易,而且可能性能更高。
答案 1 :(得分:0)
这是从算法的角度来看。不确定这是否更容易实现。
基本上对这两个图像进行异或并使用任何信息理论算法进行压缩(霍夫曼编码?)
答案 2 :(得分:0)
我知道答案很晚,但我今天发现了这个问题。
我已对图像差异进行了一些分析,但代码是为 java 编写的。请查看以下可能提供帮助的链接
How to find rectangle of difference between two images
代码找到差异并将矩形保留在Linkedlist中。您可以使用包含矩形的链接列表来修补基本图像上的差异。
干杯!