2014-02-17 45 views
1

我有一个地图,其上有许多跨地图上传播的相似符号(树)的。 I 我使用opencv来查找所有符号的X,Y坐标。去除或防止复制模板匹配OpenCV中与Python

它的工作很好,但我得到的重复结果数量巨大。如果我增加过滤器阈值,重复数量会减少,因为许多符号都会丢失。我已经尝试编写一些代码来根据邻近度筛选出结果,但我没有太多运气。有没有人对我可以在这里尝试什么有所了解?

img_rgb = cv2.imread('images/map.jpg') 
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) 
template = cv2.imread('images/tree.jpg',0) 
w, h = template.shape[::-1] 

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED) 

threshold = 0.35 
matches = np.where(res >= threshold) 

tree_count = 0 
for pt in matches: 
    tree_count += 1 
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (255,0,0), 1) 

cv2.imwrite('found_map.jpg',img_rgb) 
print "Done " + map 

回答

0

我可以考虑两种选择。

  1. 做一个形态erosion的结果图像,直到你只有点。许多模块具有此功能。例如opencv和skimage。

  2. 使用结果图像,你可以尝试计算轮廓,并提取每个轮廓的内侧。

没有一些示例数据,很难说什么是最好的选择。不同的数据通常需要不同的方法