【问题标题】:Find logo in desktop screenshot在桌面屏幕截图中查找徽标
【发布时间】:2011-06-15 16:33:53
【问题描述】:

我需要开发一个桌面应用程序

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

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

3.) 现在我的应用程序需要搜索屏幕截图中的所有徽标,并判断所有徽标存在于哪些位置以及位置。

4.) 我使用了 OPENCV,它可以工作,但是当用户更改桌面背景并截取屏幕截图时,它无法正常工作,因为徽标的透明区域正在获取桌面背景内容。

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

【问题讨论】:

  • 如果您只是想找到所有正在运行的程序,在屏幕截图中寻找徽标可能不是最好的方法...
  • 要求不是查找所有正在运行的程序,而是查找桌面上是否存在x应用图标,如果存在,在什么位置。

标签: algorithm image-processing opencv computer-vision


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    查看我对this question的回复。

    基本上:

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

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

    编辑

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

    【讨论】:

    • 图标在某些区域可能是空心的(因此该区域没有边缘),在这种情况下,桌面图像的边缘图像(随着背景的变化)将包含额外的边缘,正常情况如何模板匹配可以解决这个问题。
    • 它会处理得很好,因为你的模板也会有一个空心部分。自己试试吧。
    【解决方案3】:

    我不熟悉您使用的工具,但我猜您必须:

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

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

    【讨论】:

    • 你是对的。但我正在寻找一些用于快速模板匹配与区域功能的算法。如果我自己编写并检查每个图像块,那将非常耗时。 Opencv 在桌面图像中查找一个徽标大约需要 10-20 毫秒。
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多