0

我想获取 x11 窗口的屏幕截图并在其中找到较小图像的位置。我没有处理图像的经验,我搜索了很多,但没有得到太多有用的结果。

图像来自文件,可以以任何更易于使用的格式加载。使用XGetImage获取屏幕截图很容易。但接下来的问题是使用 XYPixmap 或 ZPixmap 的格式是什么?有什么不同?每个像素是如何表示的?

然后图像呢?哪种文件格式更容易使用?然后每个像素如何以这种格式表示?

我应该使用哪种算法来查找屏幕截图中图像的位置?

我真的迷路了。我需要朝着正确的方向前进,并查看一些示例代码,这些代码可以帮助我理解我正在处理的内容。找不到类似的作品。

只要我让它在我的 ubuntu 机器上运行,语言、框架或工具对我来说并不重要。我可以使用 C、C++、haskell、python 或 javascript 工作。

4

1 回答 1

3

使用 XYPixmap,每个图像平面都是一个单独的位图(每个像素一个位,每个扫描线的末尾都有填充)。如果你有 24 位颜色,你会得到 24 个单独的位图。要检索某些 (x,y) 坐标处的像素值,您需要从这些坐标处的每个位图中获取一个位,并将这些位打包成一个像素。

使用 ZPixmap,像素被表示为序列,在每条扫描线的末尾都有填充。如果您有 24 位颜色,则每 3 个字节是一个像素。

在这两种情况下,最后都可能有填充,有时在每条扫描线的开头。这一切都在这里描述。

我不会直接使用任何一种格式。将您的像素图转换为简单的 1、2 或 4 字节/像素 2D 数组,并对要搜索的模式执行相同操作。如果要查找完全匹配,可以使用稍作修改的字符串搜索算法,例如KMP。模糊匹配很棘手,我不知道有什么方法可以很好地工作。

于 2013-01-01T14:43:29.373 回答