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

如何使用OpenCV计算小图像存在于大图像中的匹配概率百分比

需求可行性结论

完全可以通过OpenCV实现,你当前采用的归一化模板匹配方案本身就支持计算匹配概率百分比。

百分比计算规则

你选用的cv2.TM_SQDIFF_NORMED是归一化平方差匹配算法,输出的匹配结果取值范围固定在0~1之间:

  • 结果值为0时代表两块区域完全一致
  • 结果值为1时代表两块区域完全不匹配
    对应的匹配概率百分比计算公式为:(1 - 最小匹配值mn) * 100,数值越高代表小图存在于大图的概率越高。

如果后续你切换为其他归一化匹配方法,可对应调整计算逻辑:

  • 若使用cv2.TM_CCOEFF_NORMED、cv2.TM_CCORR_NORMED,值越大匹配度越高,完全匹配时值为1,概率计算可采用max(匹配结果最大值, 0) * 100
修正后可输出概率的完整代码
import cv2
import numpy as np

large_image = cv2.imread(r'大图本地路径')
# 裁剪大图降低无关区域干扰
height = large_image.shape[0]
width = large_image.shape[1]
large_image = large_image[5:height-173,260:width-25]

small_image = cv2.imread(r'小图本地路径')

method = cv2.TM_SQDIFF_NORMED
# 注意:matchTemplate第一个参数为大图,第二个参数为小图模板,原代码此处顺序错误已修正
result = cv2.matchTemplate(large_image, small_image, method)

# 获取最小匹配值和对应坐标
mn,_,mnLoc,_ = cv2.minMaxLoc(result)
# 计算匹配概率
match_prob = (1 - mn) * 100
print(f"小图在大图中的匹配概率为:{match_prob:.2f}%")

# 可选:绘制匹配框
MPx,MPy = mnLoc
trows,tcols = small_image.shape[:2]
cv2.rectangle(large_image, (MPx,MPy),(MPx+tcols,MPy+trows),(0,0,255),2)
cv2.imshow('匹配结果',large_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意事项
  • 模板匹配仅适用于小图在大图中无缩放、无旋转、无透视变形的场景,如果存在以上变换建议改用SIFT、ORB等特征点匹配方案
  • 可根据业务需求设定阈值过滤误匹配,比如匹配概率低于80%时判定为小图不存在于大图中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:18:03