如何从OpenCV模板匹配得到的x,y数组中提取y值在100-300的坐标对?
解决模板匹配后筛选并显示坐标对的问题
我明白你的需求啦——现在你已经通过模板匹配提取到了x、y坐标数组,但只想保留y值在100到300之间的点,并且需要同时显示对应的x和y,而不是只输出x。
先理清楚问题:你之前的代码只对x数组应用了布尔索引,所以只得到了符合条件的x值。要同时获取对应的y值,我们只需要用同一个掩码对x和y数组一起筛选,或者把坐标合并成二维数组后再筛选就行。
完整的实现步骤
首先假设你已经完成了模板匹配的核心步骤,获取到了所有匹配点的x、y数组(注意OpenCV中loc的顺序是(行, 列),对应y和x,别搞反哦):
import cv2 import numpy as np img = cv2.imread("map.png") template = cv2.imread('temp.png', 0) # 转灰度图(如果原图像是彩色的) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 执行模板匹配 result = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED) # 设置匹配阈值,根据你的需求调整 threshold = 0.8 loc = np.where(result >= threshold) # 提取x和y坐标(loc[0]是行→y,loc[1]是列→x) y = loc[0] x = loc[1]
接下来有两种方法筛选并输出坐标对:
方法1:用掩码同时筛选x和y
先创建一个布尔掩码,标记出y值符合条件的位置,再用这个掩码分别提取x和y,最后配对显示:
# 创建掩码:y大于100且小于300 mask = np.logical_and(y > 100, y < 300) # 提取符合条件的x和y filtered_x = x[mask] filtered_y = y[mask] # 合并成坐标对 coords = np.column_stack((filtered_x, filtered_y)) # 打印结果 print("符合条件的坐标对:") print(coords)
方法2:先合并坐标再筛选
直接把x和y合并成一个二维数组,每一行是一个(x, y)坐标对,然后直接筛选y值符合条件的行:
# 合并所有坐标为二维数组 all_coords = np.column_stack((x, y)) # 筛选y值在100-300之间的行(all_coords[:,1]对应y值) filtered_coords = all_coords[np.logical_and(all_coords[:,1] > 100, all_coords[:,1] < 300)] # 打印结果 print("符合条件的坐标对:") print(filtered_coords)
这样就能同时得到每个符合条件点的x和y坐标啦,两种方法都可以,看你习惯哪种写法~
内容的提问来源于stack exchange,提问作者faiya
相关产品推荐
相关产品推荐

