2011-01-26 37 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,我認爲它應該爲你工作。但它不起作用,您可以嘗試在嘗試匹配之前用均勻分佈的隨機噪聲替換參考徽標中的透明像素。這將使透明像素與任何匹配計算無關,因爲無論桌面上的像素是什麼,它們都會匹配。