2015-11-18 82 views
-1

我目前正在嘗試在視頻中查找圖像。主要目標是按照屏幕上顯示的按下按鈕或彈出窗口對視頻執行一些操作。OpenCV:快速模板匹配算法

我使用的是使用了OpenCV模板匹配函數的代碼:

// For SQDIFF and SQDIFF_NORMED, the best matches are lower values. For all the other methods, the higher the better 
    if(matchingMethod == CV_TM_SQDIFF || matchingMethod == CV_TM_SQDIFF_NORMED) 
     matchLoc = minLoc; 
    else 
     matchLoc = maxLoc; 

    if(!((matchLoc.x == 0) && (matchLoc.y == 0)) || maxVal >= 0.8) 
     return TRUE; 

    return FALSE; 
} 

測試是與這兩個模板做:

Template n°1 Template n°2

並且整個圖像是3840X2160圖像(我不能但整個圖像,因爲它是太大的bmp):

1)曲注意的是,對於兩個像素差異很小的模板,該算法如何檢測第一個模板,但完全跳過第二個模板? 2)顏色深度可能會導致檢測問題嗎?

  • 這兩個模板都以24位深度加載爲BMP文件。源圖像以24位深度轉換。
  • 閾值設置爲0.92,精度好
  • MaxLevels因爲2設置爲1一個很好的精度沒有找到任何匹配

感謝您的幫助和建議

回答

0

對於那些誰可能有同樣的問題,我只需要以不同的方式管理返回值。

而不是

if(!((matchLoc.x == 0) && (matchLoc.y == 0)) || maxVal >= 0.8) 
     return TRUE; 

只要潛在的匹配(80%匹配)已經發現返回true。

現在我只有在maxVal優於0.99意味着非常高的匹配時才返回true。

if(maxVal >= 0.99) 
     return TRUE; 

我改變的第二個元素是用於分類像素值的閾值。我已將此值減小到0.82而不是0.94,以獲得更多可能的匹配,然後使用maxVal值進行篩選。