在桌面截图中查找徽标

时间:2011-01-26 07:23:01

标签: algorithm image-processing opencv computer-vision

我需要开发一个

的桌面应用程序

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

2。)用户将获取桌面的屏幕截图并保存图像。

3。)现在我的应用程序需要搜索截图图像中的所有徽标,并告诉所有徽标存在和位置。

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

有人可以提供解决方案或图书馆开源,商业化来完成这项工作。

3 个答案:

答案 0 :(得分:8)

使用互相关很容易做到。

请参阅我对this question的回答。

基本上:

  • 从桌面图像和每个图标的一个模板图像开始
  • 将边缘检测(例如Sobel)应用于桌面图像和模板图像。
  • 丢弃原始桌面图像和模板,您将不再需要它们,因为我们将使用边缘检测图像
  • 对于每个模板
    • 像往常一样进行模板匹配
    • 阈值结果的最大值。如果它高于阈值,则在该位置处匹配。否则,不匹配。

如果您的图标在桌面上的网格中对齐,您可以通过仅检查特定网格位置来加快处理速度。

修改

您还可以通过了解要搜索的图标来节省大量时间。如果您有权访问文件系统,那么只需在与桌面对应的目录中查找*.lnk个文件(或您可能感兴趣的任何其他扩展名)(不能完全记住它是什么,但对于Windows7就像c:\users\misha\desktop)。这会告诉你桌面上有什么图标。这样您就可以在进行模板匹配之前缩短模板候选列表。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我不熟悉你正在使用的工具,但我猜你必须要么:

a)告诉你的程序在比较操作期间忽略图标图像中的透明像素。

OR

b)告诉你的程序将图标图像中的透明像素视为“通配符”,可以是任何颜色。