You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用numpy在2D/3D矩阵中定位目标图像在背景图中的位置?

解决方法:用Numpy定位背景图中固定颜色方块的坐标

你的问题出在直接对两个可能尺寸不同的数组做相等判断,且没有针对「仅方块边缘颜色固定」的条件做针对性处理。以下是可行的实现方案:

核心思路

  1. 提取目标方块的固定边缘灰度值(利用方块颜色固定的特性,取其边缘像素值即可)
  2. 在背景灰度图中筛选出所有匹配该固定灰度值的像素坐标
  3. 从匹配坐标中提取方块的特征点(比如左上角)坐标

代码实现

import numpy as np
import cv2

# 读取灰度图
background = cv2.imread('backgroundimage.png', cv2.IMREAD_GRAYSCALE)
target = cv2.imread('target.png', cv2.IMREAD_GRAYSCALE)

# 1. 获取目标方块的固定边缘灰度值(这里取目标图左上角像素作为固定颜色参考)
fixed_color = target[0, 0]

# 2. 在背景图中找到所有等于固定颜色的像素坐标
y_coords, x_coords = np.where(background == fixed_color)

# 3. 计算方块左上角坐标(取最小的x、y值即为左上角点)
if len(x_coords) > 0 and len(y_coords) > 0:
    top_left_x = np.min(x_coords)
    top_left_y = np.min(y_coords)
    print(f"目标方块左上角坐标:({top_left_y}, {top_left_x})")
else:
    print("未找到目标方块")

进阶补充(针对空心方块)

如果目标是空心方块,仅边缘颜色固定,用轮廓检测定位会更精准:

# 用轮廓检测定位空心方块
ret, thresh = cv2.threshold(background, fixed_color-1, fixed_color+1, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for cnt in contours:
    x, y, w, h = cv2.boundingRect(cnt)
    # 可根据方块预期宽高筛选目标
    if w > 10 and h > 10:
        print(f"目标方块左上角坐标:({y}, {x})")
        break

内容的提问来源于stack exchange,提问作者kerz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:20:47