2014-07-26 162 views
1

我正在嘗試使用opencv/python進行模板匹配。它在視頻中工作良好,意味着它在屏幕中找到對象,並用矩形限制匹配的對象。但是,當物體不在那裏時,邊界矩形就會漂移。只有在模板匹配時才畫平方(模板匹配)

有沒有辦法說「如果模板不一樣,不要繪製矩形」?

我想也許如果我採用了模板匹配方法的返回值,然後創建了一個閾值「如果數組中的數字高於水平,繪製矩形」,但圖像數組太大而無法完成那。

我在這裏以下教程:http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html

有一個類似的問題在這裏:OpenCV. Drawing rectangle when matching但我被迷惑的答案,因爲我認爲MIN_VALUE只是對於那些以繪製矩形的座標。

#template matching 
edges2 = edges.copy() 
template = cv2.imread("hand.jpg",0) 
w,h = template.shape[::-1] 
edges = edges2.copy() 
method = eval('cv2.TM_CCOEFF') 
res = cv2.matchTemplate(edges,template,method) 
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) 
top_left = max_loc 
bottom_right = (top_left[0] + w, top_left[1] + h) 
cv2.rectangle(frame,top_left, bottom_right, 255, 2) 

回答

0

max_val通過minMaxLoc()返回可用於你正在尋找的門檻。如果檢測結果非常好,這個值將是最高的(1,如果我記得)。

+0

當我開始打印出max_val時,我得到了數百萬的數字,但它絕對是一個門檻。 – JustBlossom

+0

在C++接口中,'CV_32FC1'圖像的範圍是從0到1.我不知道Python的存儲方式。不確定,但也許NumPy有更好的解決方案? –

+0

您的意思是獲取閾值的值?我爲視頻幀使用NumPy數組,因此我假設(也許是一件壞事)max_val來自NumPy計算。 – JustBlossom