查找屏幕共享应用程序的两个图像之间的差异

Tho*_*mas 4 c# image-comparison desktop-sharing screensharing

嗨,我正在编写一个客户端/服务器远程查看器(桌面共享)应用程序,其中桌面的屏幕截图通过套接字通过网络发送。我想通过获取两个图像之间的差异然后发送差异来减少传输的大小。另一方面,差异将与另一端的先前图像合并。

所以任何人请指导我如何完成这项工作。现在我每次都以编程方式通过网络发送屏幕的完整图像,而在另一端编程只是显示该图像。我觉得大量数据正在通过网络传递,另一端的屏幕更新速度很慢。所以请告诉我如何比较两个图像并仅将差异发送到另一端的好方法。还告诉我如何将差异与另一端的实际图像合并。

1) 许多免费代码和库可用于图像比较,但我只是不明白我应该使用哪一个,哪一个会更快进行比较。所以就这方面指导我吧。

2)最重要的部分是如何仅通过网络发送差异并将差异与另一端的实际图像合并

我尝试了很多来获取有关我的第 2 点的一些信息,但没有得到类似的信息。我找不到谁能指导我如何仅通过网络发送差异并将差异与另一端的实际图像合并

所以我正在寻找针对我的第 2 点的深入讨论。谢谢

Peo*_*are 5

您必须执行以下三个步骤:

  1. 创建两个连续图像的差异 (DIFF)。每像素比较两个图像的像素将非常耗时。你应该使用一个完善的库,比如 OpenCV;查看 .NET 的 Emgu CV 库 (http://www.emgu.com/):AbsDiff()应该是您正在寻找的方法。结果将类似于 DIFF = IMG2 - IMG1。
  2. 通过网络发送 DIFF。它仍然是一个完整的图像,但 JPEG 或 PNG 将利用其完整的压缩能力,假设它是一个主要的黑色图像,即很少变化。所以这些实际上是三个子步骤:压缩 - 发送 - 解压缩
  3. 在当前图像上应用 DIFF。接收者可以计算下一个图像 IMG2 = DIFF + IMG1。这可以使用 EmguCV 的Add方法来执行。