2014-07-26 123 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