当前位置:首页>python>OpenCV-Python实战|模板匹配全解析:快速定位目标,新手也能一键上手(附完整代码)

OpenCV-Python实战|模板匹配全解析:快速定位目标,新手也能一键上手(附完整代码)

  • 2026-06-28 10:02:27
OpenCV-Python实战|模板匹配全解析:快速定位目标,新手也能一键上手(附完整代码)

在前几天的分享中,我们先后讲解了空间域的图像平滑、边缘检测、轮廓处理,以及频域的傅里叶变换,覆盖了图像预处理特征提取频域优化的全流程。而今天要讲的模板匹配,是OpenCV中最基础、最实用的目标定位技术——无需复杂的特征提取,只需一张模板图,就能快速在一张目标图中找到与模板相似的区域,上手门槛极低。

模板匹配的核心应用场景非常广泛:比如工业质检中定位零件的位置、人脸识别中定位面部特征(眼睛、鼻子)、截图中定位特定图标、文档中定位特定文字区域,甚至是日常的图片检索,都能用到模板匹配。它的核心优势是简单、高效、易上手,尤其适合新手入门目标定位,也是衔接轮廓处理、形状匹配的关键技术。

今天这篇实操教程,全程聚焦OpenCV-Python落地,从模板匹配的核心原理(通俗解读)、7种匹配方法对比、单目标定位、多目标定位,到实操避坑和完整实战代码,每一部分都附可复制代码、效果对比和新手技巧,完美衔接此前系列内容,让新手能快速掌握模板匹配的核心用法,轻松实现目标定位。

一、前置基础(新手必看,衔接前文)

1. 核心前提:环境配置

所有操作均基于OpenCV-Python,若未配置环境,执行以下命令一键安装/升级,适配Python 3.7-3.12Windows/Mac/Linux全兼容(与前几篇保持一致,降低新手学习成本):

python# 安装/升级OpenCV-Python(核心依赖)pip install opencv-python -U# 安装辅助库(图像显示、数据处理)pip install numpy matplotlib

2. 核心概念:模板匹配是什么?(通俗解读)

模板匹配的逻辑非常简单,无需复杂理论,用一句话就能讲清:以模板图为标尺,在目标图中逐像素滑动比对,计算模板与目标图中每个子区域的相似度,相似度最高的区域,就是我们要找的目标位置

关键前提:

模板图(template):需要定位的目标样本,尺寸必须小于等于目标图(target),且模板图的特征要与目标图中的目标完全一致(比如模板是小圆形,目标图中要找的也是小圆形);

匹配逻辑:模板在目标图中滑动,每次滑动都会计算一个相似度值,最终通过相似度值,确定目标的准确位置,本质是逐区域相似度比对

举个通俗例子:我们在一张截图(目标图)中找一个按钮图标(模板图),模板匹配就相当于用这个按钮图标,在截图中逐位置比对,找到与按钮图标最像的区域,就是按钮的位置——这也是我们日常使用截图识别功能的核心逻辑之一。

3. 测试图像准备(统一对比,保持连贯)

为了让模板匹配的效果更直观,同时与前几篇文章保持连贯,我们统一使用带多个相似目标的灰度图像(风格与边缘检测、轮廓处理、傅里叶变换篇测试图一致),同时准备对应的模板图,代码如下,可直接复用(也可替换为自己的图像):

pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 1. 读取目标图(含多个相似目标)和模板图(单个目标)target = cv2.imread("target.jpg", 0) # 目标图(灰度图),替换为自己的图像路径template = cv2.imread("template.jpg", 0) # 模板图(灰度图),替换为自己的图像路径# 2. 获取模板图的尺寸(后续用于绘制目标矩形)h, w = template.shape # h:模板高度,w:模板宽度print(f"模板尺寸:宽度{w}像素,高度{h}像素")# 显示目标图与模板图plt.subplot(1, 2, 1)plt.imshow(target, cmap="gray")plt.title("目标图(含多个相似目标)")plt.axis("off")plt.subplot(1, 2, 2)plt.imshow(template, cmap="gray")plt.title("模板图(单个目标)")plt.axis("off")plt.show()

二、核心原理:模板匹配的7种匹配方法(通俗解读+对比)

OpenCV封装了7种模板匹配方法,均通过cv2.matchTemplate()函数实现,核心区别在于相似度计算方式,不同方法适用于不同场景(比如抗噪声、亮度变化等),新手无需死记原理,只需记住每种方法的适用场景,按需选择即可。

1. 核心函数:cv2.matchTemplate()

所有模板匹配方法都依赖这个函数,参数简单易记,核心参数如下:

pythoncv2.matchTemplate(image, templ, method)

image:目标图(需要定位目标的图像);

templ:模板图(用于比对的目标样本);

method:匹配方法(7种可选,核心参数);

返回值:result(相似度矩阵),矩阵的每个元素对应模板在目标图中对应位置的相似度值。

2. 7种匹配方法对比(新手重点记3种即可)

7种方法各有优劣,我们整理了最常用的3种方法,以及另外4种方法的特点,新手优先掌握前3种,足以应对绝大多数场景:

匹配方法(method参数)

核心特点

适用场景

cv2.TM_CCOEFF_NORMED

归一化相关系数匹配,相似度范围[-1,1]1表示完全匹配,-1表示完全不匹配

最常用,抗噪声、抗轻微亮度变化,适合大多数场景(新手首选)

cv2.TM_SQDIFF_NORMED

归一化平方差匹配,相似度范围[0,1]0表示完全匹配,1表示完全不匹配

适合目标与背景对比度高、无噪声的场景

cv2.TM_CCORR_NORMED

归一化相关匹配,相似度范围[0,1]1表示完全匹配

计算速度快,适合简单场景,抗噪声能力一般

cv2.TM_CCOEFF

未归一化相关系数匹配,相似度无固定范围,数值越大匹配度越高

不推荐新手使用,受亮度影响大

cv2.TM_SQDIFF

未归一化平方差匹配,数值越小匹配度越高

不推荐新手使用,受亮度、噪声影响大

cv2.TM_CCORR

未归一化相关匹配,数值越大匹配度越高

不推荐新手使用,抗干扰能力弱

cv2.TM_HAT_L2

基于Haar小波的匹配,抗噪声能力强,但计算速度慢

复杂噪声场景,对速度要求不高的场景

关键技巧:新手优先使用cv2.TM_CCOEFF_NORMED,适配绝大多数场景,且相似度值直观(接近1就是匹配度高),无需额外处理。

三、OpenCV实战:模板匹配全场景实操(代码+效果+解读)

模板匹配的核心实操分为两种场景:单目标定位(目标图中只有一个与模板匹配的目标)、多目标定位(目标图中有多个与模板匹配的目标),我们分别拆解,代码可直接复制运行,结合效果理解用法。

1. 基础实操:单目标定位(新手入门)

单目标定位是模板匹配最基础的场景,核心步骤:读取图像执行模板匹配找到相似度最高的位置绘制矩形标注目标,代码如下:

pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 1. 读取目标图和模板图(灰度图)target = cv2.imread("target.jpg", 0)template = cv2.imread("template.jpg", 0)h, w = template.shape# 2. 执行模板匹配(新手首选方法:cv2.TM_CCOEFF_NORMED)result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED)# 3. 找到相似度最高的位置(阈值可调整,一般取0.8,值越高匹配度要求越严格)threshold = 0.8# 找到所有相似度大于阈值的位置(返回坐标数组)locations = np.where(result >= threshold)# 4. 绘制矩形标注目标(单目标只需取第一个位置)# 将坐标转换为(x,y)格式(locations返回的是(y,x),需调换顺序)x, y = zip(*locations[::-1])[0]# 绘制矩形:(x,y)为左上角坐标,(x+w, y+h)为右下角坐标,红色,线条粗细2target_color = cv2.cvtColor(target, cv2.COLOR_GRAY2BGR)cv2.rectangle(target_color, (x, y), (x + w, y + h), (0, 0, 255), 2)# 标注相似度cv2.putText(target_color, f"Match: {result[y, x]:.2f}", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)# 显示效果(目标图 vs 模板图 vs 定位结果)plt.subplot(1, 3, 1)plt.imshow(target, cmap="gray")plt.title("目标图")plt.axis("off")plt.subplot(1, 3, 2)plt.imshow(template, cmap="gray")plt.title("模板图")plt.axis("off")plt.subplot(1, 3, 3)plt.imshow(cv2.cvtColor(target_color, cv2.COLOR_BGR2RGB))plt.title("单目标定位结果")plt.axis("off")plt.show()

调优技巧:阈值threshold的取值很关键——取值越高,匹配度要求越严格,避免误匹配;取值越低,匹配范围越广,但可能出现误匹配,新手建议先取0.8,再根据实际效果调整。

2. 进阶实操:多目标定位(高频场景)

当目标图中有多个与模板匹配的目标时,单目标定位只能标注一个目标,此时需要遍历所有相似度大于阈值的位置,实现多目标定位,核心是去重(避免同一目标被多次标注),代码如下:

pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 1. 读取目标图和模板图(灰度图)target = cv2.imread("target.jpg", 0)template = cv2.imread("template.jpg", 0)h, w = template.shape# 2. 执行模板匹配(沿用新手首选方法)result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED)threshold = 0.8locations = np.where(result >= threshold)# 3. 多目标定位:遍历所有匹配位置,去重(避免同一目标多次标注)target_color = cv2.cvtColor(target, cv2.COLOR_GRAY2BGR)# 将坐标转换为(x,y)格式,便于遍历x_list, y_list = zip(*locations[::-1])# 去重逻辑:相邻的匹配位置视为同一目标,保留一个used = [] # 记录已标注的位置,避免重复for i in range(len(x_list)):x, y = x_list[i], y_list[i]# 判断当前位置是否已标注(相邻位置差值小于模板宽度/高度的一半,视为同一目标)if not any(abs(x - ux) < w/2 and abs(y - uy) < h/2 for ux, uy in used):cv2.rectangle(target_color, (x, y), (x + w, y + h), (0, 255, 0), 2)cv2.putText(target_color, f"{result[y, x]:.2f}", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)used.append((x, y))# 显示效果(目标图 vs 多目标定位结果)plt.subplot(1, 2, 1)plt.imshow(target, cmap="gray")plt.title("目标图(含多个相似目标)")plt.axis("off")plt.subplot(1, 2, 2)plt.imshow(cv2.cvtColor(target_color, cv2.COLOR_BGR2RGB))plt.title(f"多目标定位结果(共{len(used)}个目标)")plt.axis("off")plt.show()print(f"共找到{len(used)}个与模板匹配的目标")

关键技巧:去重逻辑是多目标定位的核心——由于模板滑动时,同一目标会被多次检测(相邻位置的相似度都很高),因此需要判断相邻位置的距离,小于模板尺寸的一半,就视为同一目标,避免重复标注。

3. 拓展实操:抗噪声、抗亮度变化的模板匹配

实际场景中,目标图可能存在噪声、亮度变化,导致模板匹配效果变差,此时可以结合前几篇所学的图像预处理(高斯平滑、灰度拉伸),提升匹配精度,代码如下:

pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 1. 读取目标图和模板图,添加噪声、改变亮度(模拟真实场景)target = cv2.imread("target.jpg", 0)template = cv2.imread("template.jpg", 0)h, w = template.shape# 模拟真实场景:添加高斯噪声、降低亮度def add_noise_and_adjust_brightness(img, noise_var=0.001, brightness=50):# 添加高斯噪声img = np.array(img/255, dtype=np.float32)noise = np.random.normal(0, noise_var**0.5, img.shape)img_noise = img + noiseimg_noise = np.clip(img_noise, 0, 1)img_noise = np.uint8(img_noise*255)# 降低亮度img_noise = cv2.addWeighted(img_noise, 1, np.zeros_like(img_noise), 0, -brightness)return img_noisetarget_noisy = add_noise_and_adjust_brightness(target)# 2. 图像预处理:高斯平滑(降噪)+ 灰度拉伸(增强对比度)target_processed = cv2.GaussianBlur(target_noisy, (3, 3), sigmaX=1) # 高斯平滑降噪# 灰度拉伸:增强对比度,提升匹配精度target_processed = cv2.equalizeHist(target_processed)# 3. 执行模板匹配(新手首选方法)result = cv2.matchTemplate(target_processed, template, cv2.TM_CCOEFF_NORMED)threshold = 0.75 # 噪声场景可适当降低阈值locations = np.where(result >= threshold)# 4. 多目标定位+去重target_color = cv2.cvtColor(target_noisy, cv2.COLOR_GRAY2BGR)x_list, y_list = zip(*locations[::-1]) if len(locations[0]) > 0 else ([], [])used = []for i in range(len(x_list)):x, y = x_list[i], y_list[i]if not any(abs(x - ux) < w/2 and abs(y - uy) < h/2 for ux, uy in used):cv2.rectangle(target_color, (x, y), (x + w, y + h), (255, 0, 0), 2)cv2.putText(target_color, f"{result[y, x]:.2f}", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 0, 0), 2)used.append((x, y))# 显示效果(带噪声亮度变化图 vs 预处理后图 vs 定位结果)plt.subplot(1, 3, 1)plt.imshow(target_noisy, cmap="gray")plt.title("带噪声+亮度变化图")plt.axis("off")plt.subplot(1, 3, 2)plt.imshow(target_processed, cmap="gray")plt.title("预处理后图像")plt.axis("off")plt.subplot(1, 3, 3)plt.imshow(cv2.cvtColor(target_color, cv2.COLOR_BGR2RGB))plt.title(f"抗干扰定位结果({len(used)}个目标)")plt.axis("off")plt.show()

核心思路:结合前几篇所学的高斯平滑(降噪)、灰度拉伸(增强对比度),对目标图进行预处理,减少噪声和亮度变化对匹配的影响,再执行模板匹配,提升定位精度——这也是模板匹配在实际项目中的常用流程,衔接前文系列内容。

四、实操避坑指南(新手必看)

模板图的尺寸必须小于等于目标图,若模板图尺寸大于目标图,会直接报错;若模板图尺寸过小,可能导致匹配精度降低,建议模板图尺寸为目标图中目标尺寸的1:1

模板匹配对尺度变化、旋转不敏感——若目标图中的目标与模板图的尺寸不同、旋转角度不同,匹配效果会很差,甚至无法匹配;此时需要先对图像进行尺度归一化、旋转校正,再进行匹配。

新手优先使用cv2.TM_CCOEFF_NORMED方法,归一化后的相似度值直观,抗干扰能力强;避免使用未归一化的方法(如cv2.TM_CCOEFF),受亮度、噪声影响大。

多目标定位必须添加去重逻辑,否则同一目标会被多次标注;去重的阈值(模板尺寸的一半)可根据实际图像调整,确保不重复、不遗漏。

实际场景中,若目标图有噪声、亮度变化,先进行图像预处理(高斯平滑、灰度拉伸、二值化),再执行模板匹配,能显著提升定位精度;预处理步骤可复用前几篇所学的代码。

绘制矩形时,注意坐标顺序:cv2.matchTemplate()返回的locations(y,x)格式,需转换为(x,y),否则矩形会绘制在错误位置。

五、完整实战代码(一键复制运行)

整合以上所有操作,包含图像预处理+单目标定位+多目标定位+抗干扰匹配,替换自己的图像路径,即可一键跑通,适合新手直接实操,巩固所有知识点,同时衔接前文系列内容:

pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 1. 环境验证(可选)print("OpenCV版本:", cv2.__version__)# 2. 辅助函数(加噪、亮度调整、预处理)def add_noise_and_adjust_brightness(img, noise_var=0.001, brightness=50):# 添加高斯噪声img = np.array(img/255, dtype=np.float32)noise = np.random.normal(0, noise_var**0.5, img.shape)img_noise = img + noiseimg_noise = np.clip(img_noise, 0, 1)img_noise = np.uint8(img_noise*255)# 调整亮度img_noise = cv2.addWeighted(img_noise, 1, np.zeros_like(img_noise), 0, -brightness)return img_noisedef preprocess_image(img):# 图像预处理:高斯平滑+灰度拉伸img_blur = cv2.GaussianBlur(img, (3, 3), sigmaX=1)img_processed = cv2.equalizeHist(img_blur)return img_processed# 3. 读取图像(替换为自己的图像路径)target = cv2.imread("target.jpg", 0)template = cv2.imread("template.jpg", 0)h, w = template.shapeif h > target.shape[0] or w > target.shape[1]:print("错误:模板图尺寸大于目标图,请更换模板图!")else:# 4. 单目标定位result_single = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED)threshold_single = 0.8locations_single = np.where(result_single >= threshold_single)target_single = cv2.cvtColor(target, cv2.COLOR_GRAY2BGR)if len(locations_single[0]) > 0:x, y = zip(*locations_single[::-1])[0]cv2.rectangle(target_single, (x, y), (x+w, y+h), (0, 0, 255), 2)cv2.putText(target_single, f"Match: {result_single[y, x]:.2f}", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)# 5. 多目标定位result_multi = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED)threshold_multi = 0.8locations_multi = np.where(result_multi >= threshold_multi)target_multi = cv2.cvtColor(target, cv2.COLOR_GRAY2BGR)x_list, y_list = zip(*locations_multi[::-1]) if len(locations_multi[0]) > 0 else ([], [])used = []for i in range(len(x_list)):x, y = x_list[i], y_list[i]if not any(abs(x - ux) < w/2 and abs(y - uy) < h/2 for ux, uy in used):cv2.rectangle(target_multi, (x, y), (x+w, y+h), (0, 255, 0), 2)cv2.putText(target_multi, f"{result_multi[y, x]:.2f}", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)used.append((x, y))# 6. 抗干扰匹配(带噪声、亮度变化)target_noisy = add_noise_and_adjust_brightness(target)target_processed = preprocess_image(target_noisy)result_anti = cv2.matchTemplate(target_processed, template, cv2.TM_CCOEFF_NORMED)threshold_anti = 0.75locations_anti = np.where(result_anti >= threshold_anti)target_anti = cv2.cvtColor(target_noisy, cv2.COLOR_GRAY2BGR)x_anti_list, y_anti_list = zip(*locations_anti[::-1]) if len(locations_anti[0]) > 0 else ([], [])used_anti = []for i in range(len(x_anti_list)):x, y = x_anti_list[i], y_anti_list[i]if not any(abs(x - ux) < w/2 and abs(y - uy) < h/2 for ux, uy in used_anti):cv2.rectangle(target_anti, (x, y), (x+w, y+h), (255, 0, 0), 2)cv2.putText(target_anti, f"{result_anti[y, x]:.2f}", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 0, 0), 2)used_anti.append((x, y))# 7. 统一显示所有效果plt.figure(figsize=(15, 10))# 第一行:目标图、模板图、单目标定位plt.subplot(2, 3, 1)plt.imshow(target, cmap="gray")plt.title("目标图")plt.axis("off")plt.subplot(2, 3, 2)plt.imshow(template, cmap="gray")plt.title("模板图")plt.axis("off")plt.subplot(2, 3, 3)plt.imshow(cv2.cvtColor(target_single, cv2.COLOR_BGR2RGB))plt.title("单目标定位")plt.axis("off")# 第二行:多目标定位、带噪声图、抗干扰定位plt.subplot(2, 3, 4)plt.imshow(cv2.cvtColor(target_multi, cv2.COLOR_BGR2RGB))plt.title(f"多目标定位({len(used)}个目标)")plt.axis("off")plt.subplot(2, 3, 5)plt.imshow(target_noisy, cmap="gray")plt.title("带噪声+亮度变化图")plt.axis("off")plt.subplot(2, 3, 6)plt.imshow(cv2.cvtColor(target_anti, cv2.COLOR_BGR2RGB))plt.title(f"抗干扰定位({len(used_anti)}个目标)")plt.axis("off")plt.tight_layout()plt.show()# 8. 保存结果(可选)cv2.imwrite("template_single.jpg", target_single)cv2.imwrite("template_multi.jpg", target_multi)cv2.imwrite("template_anti.jpg", target_anti)

最后总结(衔接系列,强化记忆)

从图像预处理、边缘检测、轮廓处理、傅里叶变换,到今天的模板匹配,我们已经完整掌握了OpenCV图像处理的核心技术栈——预处理特征提取频域优化目标定位,模板匹配作为最基础、最易上手的目标定位技术,是连接特征提取目标识别的关键环节。

模板匹配的核心不是复杂理论,而是逐区域相似度比对,新手只需记住3个关键点:首选cv2.TM_CCOEFF_NORMED方法、模板尺寸小于等于目标图、多目标定位需去重,再结合前几篇所学的图像预处理技巧,就能应对绝大多数目标定位场景。

实际项目中,模板匹配常与轮廓处理、形状匹配结合使用——先用模板匹配定位目标大致位置,再用轮廓处理提取目标轮廓,最后用形状匹配判断目标是否合格,形成定位提取验证的完整流程,这也是后续我们要讲解的核心内容。

辛苦大家看到这里啦,如果你觉得这篇OpenCV实操教程对你有帮助,麻烦动动小手,点赞+在看,让更多学习计算机视觉、OpenCV的小伙伴看到,一起交流学习、共同进步~

关注【AI与计算机视觉】,后台回复「模板匹配」,即可免费获取本文完整代码、测试素材(含目标图、模板图),还有更多OpenCV实战教程,助力大家快速上手,搞定目标定位全流程!

评论区留言「模板实操」,我们一起打卡练习,互相交流遇到的问题,深耕计算机视觉,解锁更多实战技巧!后续我们将讲解模板匹配与轮廓处理的结合应用,衔接今天的内容,记得持续关注哦~

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 19:21:26 HTTP/2.0 GET : https://f.mffb.com.cn/a/493298.html
  2. 运行时间 : 0.137632s [ 吞吐率:7.27req/s ] 内存消耗:4,681.54kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=2b0b850969f77db4e56f59503a7fbb93
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000563s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000801s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000393s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001601s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000705s ]
  6. SELECT * FROM `set` [ RunTime:0.000877s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000641s ]
  8. SELECT * FROM `article` WHERE `id` = 493298 LIMIT 1 [ RunTime:0.004481s ]
  9. UPDATE `article` SET `lasttime` = 1783077686 WHERE `id` = 493298 [ RunTime:0.001392s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.003012s ]
  11. SELECT * FROM `article` WHERE `id` < 493298 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.004704s ]
  12. SELECT * FROM `article` WHERE `id` > 493298 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000463s ]
  13. SELECT * FROM `article` WHERE `id` < 493298 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.004227s ]
  14. SELECT * FROM `article` WHERE `id` < 493298 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.024850s ]
  15. SELECT * FROM `article` WHERE `id` < 493298 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.012640s ]
0.139391s