2011-01-26 65 views
7

我需要开发,这将查找桌面截图标志

1)具有不同的应用标识的列表(背景透明),例如桌面应用程序IE,FIREFOX,CHROME,PHOTOSHOP等。

2.)用户将截取桌面并保存图像。

3.)现在我的应用程序需要搜索屏幕截图中的所有标识,并告诉哪些标识存在以及在哪里。

4.)我使用的是OPENCV,它正在工作,但当用户更改桌面背景&捕获屏幕截图时,它不起作用,因为徽标的透明区域正在获取桌面背景内容。

有人可以提供一个解决方案或图书馆开源,商业做这个工作。

+2

如果你只是试图找出所有正在运行的程序,在屏幕截图寻找一个标志可能不是最好的办法... – SWeko 2011-01-26 07:29:44

+0

的要求是不是找到所有正在运行的程序,而不是找到X应用程序图标是否在桌面上或不在桌面上,如果是在什么位置。 – Hoshin 2011-01-26 07:33:25

回答

8

这很容易做到使用互相关。

看到我对this question的回答。

基本上:

  • 开始与桌面图像和一个模板图像的每个图标
  • 应用边缘检测(例如索贝尔)到桌面图像和模板图像。
  • 扔掉原来的桌面映像和模板,因为我们将使用边缘检测图像
  • 对于每个模板
    • 用模板匹配,你通常会
    • 你将不再需要他们了
    • 阈值结果的最大值。如果超过门槛,你在该位置进行比赛。否则,不匹配。

如果你的图标在桌面上的网格对齐,您可以通过只检查那些特定的网格位置,以加快处理。

编辑

您也可以通过了解搜索的图标节省了大量的时间。如果您有权访问文件系统,那么只需在对应于桌面的目录中查找*.lnk文件(或您可能感兴趣的任何其他扩展名)(无法准确记录它是什么,但对于Windows7而言,它类似于c:\users\misha\desktop)。这将告诉你什么图标在桌面上。这将允许您在去之前缩短模板候选列表并进行模板匹配。

0

我不熟悉您使用的工具,但我猜你有两种:

一)告诉你的程序比较操作过程中忽略的图标图像透明像素。

OR

B)告诉你的程序的图标图像处理透明像素作为“通配符”,它可以是任何颜色。

+0

你说得对。但我正在寻找一些算法来快速模板匹配与区域功能。如果我写我自己并检查每个图像块,将会花费太多时间。 Opencv花费大约10-20毫秒时间才能在桌面图像中找到一个徽标。 – Hoshin 2011-01-26 07:34:52

2

我喜欢misha's answer,我认为它应该为你工作。但它不起作用,您可以尝试在尝试匹配之前用均匀分布的随机噪声替换参考徽标中的透明像素。这将使透明像素与任何匹配计算无关,因为无论桌面上的像素是什么,它们都会匹配。