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

OpenCV模板匹配文本替换为黑框+背景置白及坐标获取问题求助

你现有代码存在以下4个问题:

  1. 宽高取值颠倒:template.shape[:-1]返回顺序为(高度, 宽度),你直接赋值给w, h会导致后续绘制矩形的尺寸和模板不符,无法正确覆盖匹配区域。
  2. 匹配阈值过低:0.5的阈值会引入大量误匹配,是当前结果出现大量杂乱黑块的核心原因,文本类模板匹配场景阈值建议调整到0.8以上,可根据实际匹配效果微调。
  3. 缺少背景置白逻辑:你直接在原图上绘制矩形,没有做背景替换的操作,自然无法得到全白背景的输出。
  4. 未做匹配结果去重:模板匹配针对同一个目标通常会返回多个重叠的坐标点,直接遍历绘制会出现重复绘制的问题。

修正后的完整代码如下:

import cv2
import numpy as np

# 读取原图与模板
img_rgb = cv2.imread('./image/10.jpg')
template = cv2.imread('./image/matchedTxt_106.jpg')
# 正确获取模板的高度、宽度
h, w = template.shape[:-1]

# 执行模板匹配
res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)
# 调高匹配阈值过滤误匹配
threshold = .85
loc = np.where(res >= threshold)

# 收集所有匹配到的框坐标
boxes = []
for pt in zip(*loc[::-1]):
    boxes.append([int(pt[0]), int(pt[1]), int(pt[0]+w), int(pt[1]+h)])

# 对重叠的匹配框去重
if len(boxes) > 0:
    boxes, _ = cv2.groupRectangles(boxes, 1, 0.2)

# 创建和原图尺寸一致的全白背景
result = np.full_like(img_rgb, 255, dtype=np.uint8)
# 绘制黑色填充矩形,同时输出坐标
for (x1, y1, x2, y2) in boxes:
    cv2.rectangle(result, (x1, y1), (x2, y2), (0,0,0), -1)
    # 此处打印的就是匹配区域的坐标,你也可以存入列表做后续使用
    print(f"匹配区域:左上角({x1}, {y1}),右下角({x2}, {y2})")

cv2.imwrite('result1.png', result)

关于匹配坐标的获取:你遍历zip(*loc[::-1])得到的pt就是匹配区域的左上角(x,y)坐标,结合模板的宽高即可算出右下角坐标,上述代码已经包含了坐标输出的逻辑。

内容的提问来源于stack exchange,提问作者Carol.Kar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:57:03