当前位置:首页>python>OpenCV-Python实战|霍夫变换全解析:轻松检测图像中的线与圆(附完整代码)

OpenCV-Python实战|霍夫变换全解析:轻松检测图像中的线与圆(附完整代码)

  • 2026-07-01 04:11:18
OpenCV-Python实战|霍夫变换全解析:轻松检测图像中的线与圆(附完整代码)

在前几天的分享中,我们从图像预处理、轮廓处理,到傅里叶变换、模板匹配,逐步解锁了OpenCV图像处理的核心技巧,覆盖了预处理特征提取目标定位的全流程。而今天要讲的霍夫变换,是OpenCV中最经典的形状检测技术——无需复杂的特征提取,就能快速、精准地检测出图像中的直线和圆形,是工业质检、场景识别、图像分割的核心工具。

霍夫变换的核心优势的是抗干扰能力强,即使直线有断裂、圆形有残缺,或者图像存在轻微噪声,也能准确检测出目标形状,这是它区别于轮廓处理、模板匹配的核心特点。今天这篇实操教程,将重点拆解霍夫变换的两大核心应用:霍夫线变换(检测直线)和霍夫圆变换(检测圆形),全程聚焦OpenCV-Python落地,避开晦涩理论,每一部分都附可复制代码、效果对比和新手避坑技巧,完美衔接此前系列内容,让新手能快速上手,轻松实现线与圆的检测。

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

1. 核心前提:环境配置

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

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

2. 核心概念:霍夫变换是什么?(通俗解读)

霍夫变换的核心逻辑,用一句话就能讲清:将图像空间中的,转换到参数空间中的线,通过参数空间中线的交点,反向定位图像空间中的直线/圆形。简单来说,就是把检测形状的问题,转化为寻找参数交点的问题,从而实现形状的精准检测。

关键区分(新手必记):

霍夫线变换:将图像空间中的直线,转换为参数空间中的一个点,多个共线点会在参数空间中交于同一点,通过寻找这个交点,就能检测出图像中的直线;

霍夫圆变换:将图像空间中的圆形,转换为参数空间中的一个三维球体,多个共圆的点会在参数空间中交于同一点,通过寻找这个交点,就能检测出图像中的圆形。

举个通俗例子:我们在一张纸上画一条直线,这条直线上的所有点,在霍夫参数空间中都会对应一条线,而这些线会交于同一个点——找到这个交点,就能反向确定纸上直线的位置和角度,这就是霍夫线变换的核心逻辑;圆形的检测逻辑类似,只是参数空间从二维变成了三维

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

为了让霍夫变换的效果更直观,同时与前几篇文章保持连贯,我们统一使用含直线、圆形的灰度图像(风格与边缘检测、模板匹配篇测试图一致),同时添加轻微噪声(模拟真实场景),代码如下,可直接复用(也可替换为自己的图像):

pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 1. 读取目标图(含直线、圆形,灰度图)img = cv2.imread("hough_test.jpg", 0) # 替换为自己的图像路径# 2. 图像预处理:高斯平滑(降噪)+ 边缘检测(突出线、圆的边缘,衔接前文)img_blur = cv2.GaussianBlur(img, (3, 3), sigmaX=1) # 高斯平滑降噪(复用前文技巧)edges = cv2.Canny(img_blur, 50, 150) # Canny边缘检测(突出线、圆的轮廓)# 显示原始图与边缘图plt.subplot(1, 2, 1)plt.imshow(img, cmap="gray")plt.title("原始图像(含直线、圆形)")plt.axis("off")plt.subplot(1, 2, 2)plt.imshow(edges, cmap="gray")plt.title("边缘检测后图像(突出线、圆边缘)")plt.axis("off")plt.show()

关键说明:霍夫变换检测线、圆时,必须先进行边缘检测(如Canny边缘检测),突出线和圆的边缘,减少背景干扰,提升检测精度——这也是衔接前文边缘检测知识点的核心环节。

二、核心实战一:霍夫线变换(检测图像中的直线)

霍夫线变换是霍夫变换最基础的应用,OpenCV封装了两种常用的霍夫线变换方法:标准霍夫线变换(HoughLines)和概率霍夫线变换(HoughLinesP),其中概率霍夫线变换更高效、更实用,是新手首选,我们重点讲解这种方法。

1. 核心函数(必记)

实操中常用概率霍夫线变换,核心函数为cv2.HoughLinesP(),参数简单易记,核心参数如下:

pythoncv2.HoughLinesP(image, rho, theta, threshold, minLineLength, maxLineGap)

image:边缘检测后的图像(必须是二值图像);

rho:距离分辨率(单位:像素),一般取1

theta:角度分辨率(单位:弧度),一般取np.pi/180(即1度);

threshold:阈值,只有投票数大于该值的直线才会被检测出来(值越大,检测越严格);

minLineLength:最小直线长度(单位:像素),短于该长度的直线会被过滤;

maxLineGap:最大直线间隙(单位:像素),同一根直线上的断点间隙小于该值,会被合并为一条直线。

关键技巧:新手可先使用默认参数(rho=1theta=np.pi/180),再根据实际效果调整thresholdminLineLengthmaxLineGap三个参数,快速得到理想效果。

2. 实操代码:霍夫线变换检测直线

结合边缘检测,实现霍夫线变换检测直线,代码可直接复制运行,附详细解读:

pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 1. 读取图像并预处理(复用前面的代码)img = cv2.imread("hough_test.jpg", 0)img_blur = cv2.GaussianBlur(img, (3, 3), sigmaX=1)edges = cv2.Canny(img_blur, 50, 150)# 2. 霍夫线变换(概率霍夫线变换,新手首选)lines = cv2.HoughLinesP(image=edges,rho=1, # 距离分辨率1像素theta=np.pi/180, # 角度分辨率1度threshold=50, # 阈值,可调整(50-100为宜)minLineLength=50, # 最小直线长度50像素maxLineGap=10 # 最大直线间隙10像素)# 3. 绘制检测到的直线(在原始图上标注)img_color = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)if lines is not None: # 防止未检测到直线报错for line in lines:x1, y1, x2, y2 = line[0] # 提取直线的两个端点坐标# 绘制红色直线,线条粗细2cv2.line(img_color, (x1, y1), (x2, y2), (0, 0, 255), 2)# 显示效果(边缘图 vs 直线检测结果)plt.subplot(1, 2, 1)plt.imshow(edges, cmap="gray")plt.title("边缘检测图像")plt.axis("off")plt.subplot(1, 2, 2)plt.imshow(cv2.cvtColor(img_color, cv2.COLOR_BGR2RGB))plt.title("霍夫线变换检测结果")plt.axis("off")plt.show()# 输出检测到的直线数量line_count = len(lines) if lines is not None else 0print(f"共检测到{line_count}条直线")

调优技巧:

若检测到的直线过多(含误检测),可增大threshold(如调整为80)、增大minLineLength(如调整为80);

若检测到的直线不完整(有断点),可减小maxLineGap(如调整为5)、减小threshold(如调整为40);

若未检测到直线,可减小threshold、减小minLineLength,同时检查边缘检测的参数是否合适(如降低Canny边缘检测的阈值)。

三、核心实战二:霍夫圆变换(检测图像中的圆形)

霍夫圆变换的逻辑与霍夫线变换类似,但参数空间为三维(圆心x、圆心y、半径r),计算量更大,OpenCV封装了cv2.HoughCircles()函数,专门用于圆形检测,同样需要先进行边缘检测,提升检测精度。

1. 核心函数(必记)

霍夫圆变换的核心函数为cv2.HoughCircles(),参数比霍夫线变换稍多,核心参数如下:

pythoncv2.HoughCircles(image, method, dp, minDist, param1, param2, minRadius, maxRadius)

image:边缘检测后的图像(必须是灰度图,建议先进行平滑处理);

method:检测方法,新手固定用cv2.HOUGH_GRADIENT(梯度法,最常用);

dp:累加器分辨率与图像分辨率的比值,一般取1.2-2.0(值越小,计算量越大,精度越高);

minDist:两个圆心之间的最小距离(单位:像素),避免检测到重叠的圆;

param1Canny边缘检测的高阈值(低阈值为高阈值的一半);

param2:霍夫圆检测的阈值(值越大,检测越严格,误检越少);

minRadius:最小圆半径(单位:像素),小于该半径的圆会被过滤;

maxRadius:最大圆半径(单位:像素),大于该半径的圆会被过滤。

2. 实操代码:霍夫圆变换检测圆形

结合高斯平滑、边缘检测,实现霍夫圆变换检测圆形,代码可直接复制运行,附详细解读:

pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 1. 读取图像并预处理(平滑+边缘检测,提升检测精度)img = cv2.imread("hough_test.jpg", 0)img_blur = cv2.GaussianBlur(img, (5, 5), sigmaX=1) # 圆检测建议用5x5高斯核,降噪效果更好edges = cv2.Canny(img_blur, 50, 150)# 2. 霍夫圆变换(梯度法,新手首选)circles = cv2.HoughCircles(image=img_blur, # 建议用平滑后的灰度图,而非边缘图,检测更稳定method=cv2.HOUGH_GRADIENT,dp=1.5, # 累加器分辨率,1.5为宜minDist=50, # 两个圆心最小距离50像素,避免重叠param1=100, # Canny边缘检测高阈值,低阈值为50param2=30, # 圆检测阈值,可调整(20-50为宜)minRadius=20, # 最小圆半径20像素maxRadius=80 # 最大圆半径80像素)# 3. 绘制检测到的圆形(在原始图上标注)img_color = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)if circles is not None: # 防止未检测到圆形报错# 将圆形参数转换为整数(返回的是浮点数)circles = np.uint16(np.around(circles))for circle in circles[0, :]:x, y, r = circle # 提取圆心坐标(x,y)和半径r# 绘制圆形:蓝色,线条粗细2cv2.circle(img_color, (x, y), r, (255, 0, 0), 2)# 标注圆心:红色圆点,半径3cv2.circle(img_color, (x, y), 3, (0, 0, 255), -1)# 显示效果(边缘图 vs 圆形检测结果)plt.subplot(1, 2, 1)plt.imshow(edges, cmap="gray")plt.title("边缘检测图像")plt.axis("off")plt.subplot(1, 2, 2)plt.imshow(cv2.cvtColor(img_color, cv2.COLOR_BGR2RGB))plt.title("霍夫圆变换检测结果")plt.axis("off")plt.show()# 输出检测到的圆形数量circle_count = len(circles[0]) if circles is not None else 0print(f"共检测到{circle_count}个圆形")

调优技巧:

若检测到的圆形过多(误检),可增大param2(如调整为40)、增大minDist、缩小minRadius或增大maxRadius

若未检测到圆形,可减小param2(如调整为25)、减小dp(如调整为1.2)、调整minRadiusmaxRadius,确保覆盖图像中圆形的实际尺寸;

霍夫圆变换对噪声敏感,建议用5x5的高斯核进行平滑处理,减少噪声对检测的影响。

四、进阶实操:霍夫变换综合应用(线+圆同时检测)

实际场景中,常需要同时检测图像中的直线和圆形(如工业零件检测:检测零件的直线边缘和圆形孔洞),我们结合前面的代码,实现线+圆同时检测,衔接前文知识点,形成完整的实操流程:

pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 1. 读取图像并预处理img = cv2.imread("hough_test.jpg", 0)img_blur = cv2.GaussianBlur(img, (5, 5), sigmaX=1)edges = cv2.Canny(img_blur, 50, 150)# 2. 同时执行霍夫线变换和霍夫圆变换# 霍夫线变换lines = cv2.HoughLinesP(edges, 1, np.pi/180, 50, minLineLength=50, maxLineGap=10)# 霍夫圆变换circles = cv2.HoughCircles(img_blur, cv2.HOUGH_GRADIENT, 1.5, 50, param1=100, param2=30, minRadius=20, maxRadius=80)# 3. 绘制线和圆(在同一张图上标注)img_color = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)# 绘制直线(红色)if lines is not None:for line in lines:x1, y1, x2, y2 = line[0]cv2.line(img_color, (x1, y1), (x2, y2), (0, 0, 255), 2)# 绘制圆形(蓝色)和圆心(红色)if circles is not None:circles = np.uint16(np.around(circles))for circle in circles[0, :]:x, y, r = circlecv2.circle(img_color, (x, y), r, (255, 0, 0), 2)cv2.circle(img_color, (x, y), 3, (0, 0, 255), -1)# 4. 显示综合检测效果plt.figure(figsize=(12, 6))# 原始图plt.subplot(1, 3, 1)plt.imshow(img, cmap="gray")plt.title("原始图像")plt.axis("off")# 边缘图plt.subplot(1, 3, 2)plt.imshow(edges, cmap="gray")plt.title("边缘检测图像")plt.axis("off")# 综合检测结果plt.subplot(1, 3, 3)plt.imshow(cv2.cvtColor(img_color, cv2.COLOR_BGR2RGB))plt.title("霍夫变换综合检测结果(线+圆)")plt.axis("off")plt.tight_layout()plt.show()# 输出检测数量line_count = len(lines) if lines is not None else 0circle_count = len(circles[0]) if circles is not None else 0print(f"共检测到{line_count}条直线,{circle_count}个圆形")

核心思路:复用前文的图像预处理技巧(高斯平滑、边缘检测),同时执行霍夫线变换和霍夫圆变换,在同一张图像上标注检测结果,模拟实际项目中的综合检测场景,体现系列知识的连贯性和实用性。

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

霍夫变换(线/圆)必须先进行图像预处理:高斯平滑(降噪)边缘检测(突出目标轮廓),否则噪声会导致大量误检测,甚至无法检测到目标;圆检测建议用5x5高斯核,降噪效果更好。

霍夫线变换优先使用cv2.HoughLinesP()(概率霍夫线变换),比标准霍夫线变换(cv2.HoughLines())更高效、更易上手,无需手动计算直线参数,直接获取端点坐标。

霍夫圆变换的输入图像,建议用平滑后的灰度图,而非边缘图,这样检测更稳定、误检更少;若用边缘图,容易出现漏检、误检。

参数调整是关键:新手可先使用教程中的默认参数,再根据实际图像效果,逐步调整阈值(threshold/param2)、尺寸参数(minLineLength/maxLineGap/minRadius/maxRadius),避免一次性调整多个参数。

霍夫圆变换对圆形的完整性要求不高,即使圆形有轻微残缺、遮挡,也能检测到,但残缺过多会导致检测失败,此时可适当降低param2阈值。

检测结果判空:必须判断linescircles是否为None,否则未检测到目标时,会报错(如“NoneType object is not iterable”)。

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

整合以上所有操作,包含图像预处理+霍夫线变换+霍夫圆变换+综合检测,替换自己的图像路径,即可一键跑通,适合新手直接实操,巩固所有知识点,同时衔接前文系列内容:

pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 1. 环境验证(可选)print("OpenCV版本:", cv2.__version__)# 2. 读取图像(替换为自己的图像路径)img = cv2.imread("hough_test.jpg", 0)if img is None:print("错误:未找到图像,请检查图像路径!")else:# 3. 图像预处理(高斯平滑+边缘检测)img_blur = cv2.GaussianBlur(img, (5, 5), sigmaX=1)edges = cv2.Canny(img_blur, 50, 150)# 4. 霍夫线变换lines = cv2.HoughLinesP(image=edges,rho=1,theta=np.pi/180,threshold=50,minLineLength=50,maxLineGap=10)# 5. 霍夫圆变换circles = cv2.HoughCircles(image=img_blur,method=cv2.HOUGH_GRADIENT,dp=1.5,minDist=50,param1=100,param2=30,minRadius=20,maxRadius=80)# 6. 绘制检测结果(分别绘制线、圆,以及综合结果)# 绘制直线img_lines = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)if lines is not None:for line in lines:x1, y1, x2, y2 = line[0]cv2.line(img_lines, (x1, y1), (x2, y2), (0, 0, 255), 2)# 绘制圆形img_circles = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)if circles is not None:circles = np.uint16(np.around(circles))for circle in circles[0, :]:x, y, r = circlecv2.circle(img_circles, (x, y), r, (255, 0, 0), 2)cv2.circle(img_circles, (x, y), 3, (0, 0, 255), -1)# 综合绘制(线+圆)img_combined = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)if lines is not None:for line in lines:x1, y1, x2, y2 = line[0]cv2.line(img_combined, (x1, y1), (x2, y2), (0, 0, 255), 2)if circles is not None:circles = np.uint16(np.around(circles))for circle in circles[0, :]:x, y, r = circlecv2.circle(img_combined, (x, y), r, (255, 0, 0), 2)cv2.circle(img_combined, (x, y), 3, (0, 0, 255), -1)# 7. 统一显示所有效果plt.figure(figsize=(15, 10))# 第一行:原始图、边缘图plt.subplot(2, 3, 1)plt.imshow(img, cmap="gray")plt.title("原始图像")plt.axis("off")plt.subplot(2, 3, 2)plt.imshow(edges, cmap="gray")plt.title("边缘检测图像")plt.axis("off")# 第二行:直线检测、圆形检测、综合检测plt.subplot(2, 3, 4)plt.imshow(cv2.cvtColor(img_lines, cv2.COLOR_BGR2RGB))plt.title(f"霍夫线变换({len(lines) if lines is not None else 0}条直线)")plt.axis("off")plt.subplot(2, 3, 5)plt.imshow(cv2.cvtColor(img_circles, cv2.COLOR_BGR2RGB))plt.title(f"霍夫圆变换({len(circles[0]) if circles is not None else 0}个圆形)")plt.axis("off")plt.subplot(2, 3, 6)plt.imshow(cv2.cvtColor(img_combined, cv2.COLOR_BGR2RGB))plt.title("综合检测结果(线+圆)")plt.axis("off")plt.tight_layout()plt.show()# 8. 保存结果(可选)cv2.imwrite("hough_lines.jpg", img_lines)cv2.imwrite("hough_circles.jpg", img_circles)cv2.imwrite("hough_combined.jpg", img_combined)

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

从图像预处理、边缘检测、轮廓处理、傅里叶变换、模板匹配,到今天的霍夫变换(线+圆检测),我们已经完整掌握了OpenCV图像处理的核心技术体系——预处理特征提取目标定位形状检测,霍夫变换作为经典的形状检测技术,填补了直线、圆形精准检测的空白,是工业质检、场景识别等实际项目的常用工具。

霍夫变换的核心不是复杂的数学公式,而是图像空间参数空间的转换逻辑,新手只需记住两个关键:霍夫线变换用cv2.HoughLinesP()(概率法),霍夫圆变换用cv2.HoughCircles()(梯度法),再结合前文的图像预处理技巧,调整好关键参数,就能轻松实现线与圆的精准检测。

实际项目中,霍夫变换常与轮廓处理结合使用——先用霍夫变换检测出直线、圆形的大致位置,再用轮廓处理提取目标的精准轮廓,最后用形状匹配判断目标是否合格,形成检测提取验证的完整流程,这也是后续我们要讲解的核心内容。

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

关注【AI与计算机视觉】,后台回复「霍夫变换」,即可免费获取本文完整代码、测试素材(含含直线和圆形的测试图),还有更多OpenCV实战教程,助力大家快速上手,搞定形状检测全流程!

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

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 18:11:07 HTTP/2.0 GET : https://f.mffb.com.cn/a/493593.html
  2. 运行时间 : 0.086267s [ 吞吐率:11.59req/s ] 内存消耗:4,649.56kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d7d9abfb742c06437ac6335a6c6dc77c
  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.000522s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000564s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000297s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000248s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000513s ]
  6. SELECT * FROM `set` [ RunTime:0.000194s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000529s ]
  8. SELECT * FROM `article` WHERE `id` = 493593 LIMIT 1 [ RunTime:0.000452s ]
  9. UPDATE `article` SET `lasttime` = 1783073467 WHERE `id` = 493593 [ RunTime:0.010644s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000262s ]
  11. SELECT * FROM `article` WHERE `id` < 493593 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000454s ]
  12. SELECT * FROM `article` WHERE `id` > 493593 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000364s ]
  13. SELECT * FROM `article` WHERE `id` < 493593 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000794s ]
  14. SELECT * FROM `article` WHERE `id` < 493593 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000827s ]
  15. SELECT * FROM `article` WHERE `id` < 493593 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001109s ]
0.088065s