仅在模板匹配时绘制方框
我正在用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)
1 个回答
0
minMaxLoc()
函数返回的 max_val
可以用来作为你想要的阈值。如果检测效果很好,这个值会是最高的(我记得是1)。