当前位置: 首页 > article >正文

OpenCV 基础模块 Python 版

OpenCV 基础模块权威指南(Python 版)

一、模块全景图

plaintext

OpenCV 架构 (v4.x+)
├─ 核心层
│  ├─ core:基础数据结构与操作(Mat/Scalar/Point)
│  └─ imgproc:图像处理流水线(滤波→变换→检测)
├─ 交互层
│  ├─ highgui:GUI 与媒体 I/O(显示/捕获/交互)
│  └─ video:视频分析(运动检测/目标跟踪)
├─ 3D 视觉层
│  └─ calib3d:相机校准与 3D 重建
├─ 特征工程层
│  └─ features2d:特征检测/描述/匹配
├─ 应用层
│  ├─ objdetect:传统目标检测(Haar/HOG)
│  ├─ ml:经典机器学习(SVM/K-means)
│  └─ dnn:深度学习推理(YOLO/ResNet)
├─ 工具模块
│  ├─ flann:快速近邻搜索
│  ├─ photo:图像修复(inpaint)
│  └─ stitching:图像拼接

二、核心模块详解

模块 1:核心模块(cv2.core

1.1 数据结构体系
结构维度典型用途内存布局示例
MatN-D图像 / 矩阵(含 ROI 机制)(height, width, channels)
Scalar1-D多通道值(BGR 颜色 / 像素值)(B, G, R) (0-255)
Point2-D坐标点(x, y)(100, 200)
Size2-D尺寸(width, height)(320, 240)
Rect4-D矩形(x, y, width, height)(50, 50, 200, 150)
1.2 核心操作

python

# 图像创建与属性
img = np.zeros((480, 640, 3), dtype=np.uint8)  # 黑色图像(BGR)
print(f"图像尺寸: {img.shape}")  # (480, 640, 3)
print(f"数据类型: {img.dtype}")  # uint8# 区域操作(ROI)
roi = img[100:300, 200:400]  # 裁剪区域
roi[:] = (0, 255, 0)         # 设置为绿色# 绘图函数(抗锯齿优化)
cv2.circle(img, (320, 240), 50, (255, 0, 0), 2, cv2.LINE_AA)  # 抗锯齿圆
cv2.putText(img, "OpenCV", (50, 50), cv2.FONT_HERSHEY_TRIPLEX, 1, (0, 255, 255), 1, cv2.LINE_AA)
1.3 内存管理最佳实践
  • 浅拷贝img_view = img[::](共享数据,无内存复制)
  • 深拷贝img_copy = img.copy()(独立数据副本)
  • 类型转换gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)(节省内存的通道转换)

模块 2:图像处理(cv2.imgproc

2.1 处理流水线(典型工作流)

plaintext

输入图像 → 滤波(降噪) → 几何变换 → 颜色空间转换 → 阈值处理 → 特征检测
2.2 核心功能矩阵
功能分类算法类型核心函数典型参数示例
图像滤波线性滤波cv2.GaussianBlur()ksize=(5,5), sigmaX=1.0
非线性滤波cv2.medianBlur()ksize=3
几何变换仿射变换cv2.warpAffine()M=平移/旋转矩阵
透视变换cv2.warpPerspective()M=3x3 透视矩阵
颜色空间色域转换cv2.cvtColor()code=COLOR_BGR2HSV
阈值处理全局阈值cv2.threshold()thresh=127, type=THRESH_BINARY
自适应阈值cv2.adaptiveThreshold()method=ADAPTIVE_THRESH_GAUSSIAN_C
边缘检测梯度法cv2.Sobel()ddepth=CV_64F, dx=1, dy=0
轮廓检测cv2.Canny()threshold1=50, threshold2=150
2.3 实战案例:图像锐化

python

# 定义锐化卷积核(拉普拉斯算子变种)
kernel = np.array([[0, -1, 0],[-1, 5, -1],[0, -1, 0]
], dtype=np.float32)sharpened = cv2.filter2D(img, -1, kernel)  # -1 表示保留原数据类型

模块 3:图形用户界面(cv2.highgui

3.1 交互系统架构

plaintext

显示系统:imshow() → 窗口管理(destroyAllWindows())
输入系统:waitKey() → 键盘事件(ASCII 码捕获)
鼠标系统:setMouseCallback() → 事件驱动(点击/拖拽)
3.2 高级应用:实时视频标注

python

# 鼠标回调函数(标注矩形)
drawing = False
ix, iy = -1, -1def draw_rectangle(event, x, y, flags, param):global ix, iy, drawingif event == cv2.EVENT_LBUTTONDOWN:drawing = Trueix, iy = x, yelif event == cv2.EVENT_MOUSEMOVE:if drawing:cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 2)elif event == cv2.EVENT_LBUTTONUP:drawing = False# 主循环
cv2.namedWindow("Annotation")
cv2.setMouseCallback("Annotation", draw_rectangle)while True:cv2.imshow("Annotation", img)if cv2.waitKey(1) & 0xFF == ord('s'):  # 保存标注cv2.imwrite("annotated.jpg", img)elif cv2.waitKey(1) & 0xFF == 27:  # ESC 退出break

模块 4:视频分析(cv2.video

4.1 运动分析流水线

plaintext

视频流 → 背景建模(MOG2/KNN) → 前景提取 → 目标跟踪(KCF/MOSSE) → 轨迹绘制
4.2 背景减除实战

python

# 初始化 MOG2 背景减除器
back_sub = cv2.createBackgroundSubtractorMOG2(history=200,        # 历史帧数detectShadows=False # 关闭阴影检测
)cap = cv2.VideoCapture("traffic.mp4")while cap.isOpened():ret, frame = cap.read()if not ret: break# 前景掩码fg_mask = back_sub.apply(frame)# 形态学后处理(降噪)fg_mask = cv2.morphologyEx(fg_mask, cv2.MORPH_CLOSE, np.ones((5,5), np.uint8))# 轮廓检测contours, _ = cv2.findContours(fg_mask, cv2.RETR_EXTERNAL, cv2.CARACTER_APPROX_SIMPLE)# 绘制运动区域for cnt in contours:if cv2.contourArea(cnt) > 1000:  # 过滤小区域x, y, w, h = cv2.boundingRect(cnt)cv2.rectangle(frame, (x,y), (x+w,y+h), (0, 255, 0), 2)cv2.imshow("Motion Detection", frame)if cv2.waitKey(30) & 0xFF == ord('q'):break

模块 5:相机校准(cv2.calib3d

5.1 校准参数体系
参数名称物理意义典型值范围
内参矩阵 (K)焦距 / 主点 / 畸变[[f_x, 0, c_x], [0, f_y, c_y], [0, 0, 1]]
畸变系数 (D)径向 / 切向畸变[k1, k2, p1, p2, k3]
外参矩阵 (R/T)相机姿态(旋转 / 平移)3x3 旋转矩阵 + 平移向量
5.2 完整校准流程
  1. 采集棋盘格图像(≥10 张)

    python

    # 生成棋盘格角点(世界坐标系)
    objp = np.zeros((7*5, 3), np.float32)
    objp[:,:2] = np.mgrid[0:7, 0:5].T.reshape(-1, 2)  # 7x5 内角点
    
  2. 检测角点并优化

    python

    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
    imgpoints = []  # 存储图像角点for img_path in calibration_images:img = cv2.imread(img_path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, corners = cv2.findChessboardCorners(gray, (7,5), None)if ret:corners = cv2.cornerSubPix(gray, corners, (11,11), (-1,-1), criteria)imgpoints.append(corners)cv2.drawChessboardCorners(img, (7,5), corners, ret)
    
  3. 计算校准参数

    python

    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None
    )
    
  4. 去畸变应用

    python

    h, w = img.shape[:2]
    newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w,h), 1, (w,h))
    undistorted = cv2.undistort(img, mtx, dist, None, newcameramtx)
    

模块 6:特征工程(cv2.features2d

6.1 特征检测对比
算法专利状态尺度不变旋转不变计算速度描述子维度
SIFT已过期128
SURF专利64/128
ORB开源是(FAST + 金字塔)是(BRIEF + 旋转)32
6.2 ORB 特征匹配实战

python

# 初始化 ORB
orb = cv2.ORB_create(nfeatures=500,    # 最大特征数scaleFactor=1.2,  # 金字塔缩放系数patchSize=31      # 描述子区域大小
)# 提取特征
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)# 匹配特征(汉明距离)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x: x.distance)  # 按距离排序# 绘制匹配
matched_img = cv2.drawMatches(img1, kp1, img2, kp2, matches[:30], None,flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS
)

模块 7:目标检测(cv2.objdetect

7.1 Haar 级联检测优化

python

# 加载优化后的分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_alt2.xml"
)# 多尺度检测(GPU 加速)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,scaleFactor=1.1,   # 尺度步长minNeighbors=5,    # 检测框最小邻域minSize=(30, 30),  # 最小检测尺寸flags=cv2.CASCADE_SCALE_IMAGE
)# 绘制结果(带置信度)
for (x,y,w,h) in faces:cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,0), 2)cv2.putText(img, "Face", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255,0,0), 2)

模块 8:深度学习(cv2.dnn

8.1 YOLOv8 目标检测实战

python

# 加载模型(需下载 yolov8n.onnx)
net = cv2.dnn.readNetFromONNX("yolov8n.onnx")# 预处理
blob = cv2.dnn.blobFromImage(img, 1/255.0, (640, 640), swapRB=True, crop=False
)# 前向传播
net.setInput(blob)
outputs = net.forward(net.getUnconnectedOutLayersNames())# 解析输出
for output in outputs:for detection in output:scores = detection[4:]class_id = np.argmax(scores)confidence = scores[class_id]if confidence > 0.5:# 边界框解码x, y, w, h = detection[:4] * np.array([img.shape[1], img.shape[0], img.shape[1], img.shape[0]])cx, cy = int(x), int(y)w, h = int(w), int(h)cv2.rectangle(img, (cx-w//2, cy-h//2), (cx+w//2, cy+h//2), (0, 255, 0), 2)cv2.putText(img, f"{class_names[class_id]} {confidence:.2f}", (cx-w//2, cy-h//2-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)

三、模块对比与选型指南

任务类型传统方案(CPU)深度学习方案(GPU)性能对比
人脸检测Haar + objdetectMTCNN + dnn★★★☆ vs ★★★★★
图像分类SVM + mlResNet + dnn★★☆ vs ★★★★★
目标跟踪KCF + videoByteTrack + dnn★★★ vs ★★★★★
图像拼接stitching 模块DeepStitch + dnn★★★★ vs ★★★★★

四、开发最佳实践

4.1 性能优化技巧

  1. 数据类型优化

    • 使用 uint8 存储图像(节省内存)
    • 浮点运算使用 float32(比 float64 快 2 倍)
  2. ROI 操作

    python

    # 高效 ROI 赋值(避免循环)
    img[100:200, 300:400] = (0, 255, 0)  # 整区域赋值
    
  3. 向量化操作

    python

    # 替代循环的向量化操作
    img[:, :, 0] = 0  # 批量设置蓝色通道为 0
    
  4. GPU 加速

    python

    # 启用 GPU(需 OpenCV 编译时支持)
    net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
    net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)
    

4.2 内存管理

操作类型内存开销推荐方法
图像复制★★★★★使用 ROI 或 numpy 视图
大矩阵运算★★★★☆预先分配内存(np.zeros()
视频帧处理★★★☆☆释放无用帧(del frame

五、安装与环境配置

5.1 安装命令

bash

# 基础安装(主模块)
pip install opencv-python==4.8.0.76  # 稳定版# 完整安装(含 contrib 模块)
pip install opencv-contrib-python==4.8.0.76# 验证安装
python -c "import cv2; print(cv2.__version__)"  # 输出版本号

5.2 环境配置(Windows)

  1. 添加系统环境变量

    • OPENCV_DIRC:\PythonXX\Lib\site-packages\cv2
    • PATH 追加:%OPENCV_DIR%\python-XX(如 python-3.11
  2. GPU 支持

    • 安装 CUDA 工具包(匹配显卡架构)
    • 编译 OpenCV 时启用 WITH_CUDA=ON(需从源码构建)

六、学习资源图谱

6.1 官方资源

  • OpenCV Python 教程(官方权威)
  • OpenCV 示例库(含 C++/Python 示例)

6.2 实战项目

  1. 基础项目

    • 人脸检测考勤系统(objdetect + highgui
    • 图像风格迁移(imgproc + 卷积核)
  2. 进阶项目

    • 实时目标跟踪器(video + dnn
    • 3D 物体重建(calib3d + 多视角图像)
  3. 工业级项目

    • 缺陷检测(imgproc + ml
    • 自动驾驶感知(dnn + 多传感器融合)

七、常见问题解决方案

问题现象解决方案
图像显示乱码(中文)使用 matplotlib 替代 highgui(支持中文标题):
plt.title("中文标题", fontproperties="SimHei")
视频播放卡顿1. 降低分辨率:resize(frame, (640, 480))
2. 减少 waitKey() 延迟:waitKey(1)
特征检测内存溢出限制特征数量:ORB_create(nfeatures=1000)
使用轻量级算法(ORB 替代 SIFT)
GPU 加速失败1. 确认显卡支持 CUDA
2. 安装匹配的 OpenCV 版本(含 CUDA 支持)

八、模块扩展(高级方向)

  1. 生物识别

    • 指纹识别:imgproc(图像增强)+ features2d(细节点匹配)
    • 虹膜识别:calib3d(眼球建模)+ dnn(特征提取)
  2. 医学影像

    • 病灶检测:dnn(U-Net 语义分割)
    • 3D 重建:calib3d(多切片配准)+ stitching(体积渲染)
  3. 无人机视觉

    • 目标跟踪:video(光流法)+ dnn(实时检测)
    • 地形测绘:calib3d(多视几何)+ stitching(全景拼接)

九、总结与学习路径

plaintext

新手入门 → 掌握 core/imgproc/highgui(图像基础操作)
↓
中级进阶 → 学习 video/calib3d/features2d(视频分析与 3D 视觉)
↓
高级实战 → 精通 dnn/ml/objdetect(深度学习与目标识别)
↓
工程落地 → 结合 flann/photo/stitching(性能优化与完整方案)

推荐学习周期

  • 基础阶段(1-2 周):完成图像读写、滤波、几何变换
  • 进阶阶段(2-4 周):实现目标检测、特征匹配、相机校准
  • 实战阶段(4-8 周):开发完整项目(如智能监控、AR 应用)

通过此指南,开发者可快速构建 OpenCV 知识体系,从模块原理到工程实践实现全栈能力提升。建议结合 OpenCV 官方教程(每周 10 小时)与实战项目(每月 1 个完整项目)持续精进。

附录:模块速查表

模块名核心功能典型函数示例内存复杂度
core数据结构与基础操作Matline()copyTo()★★☆
imgproc图像处理流水线GaussianBlur()warpAffine()Canny()★★★★
highgui交互界面imshow()VideoCapture()setMouseCallback()★★☆
video视频分析createBackgroundSubtractorMOG2()TrackerKCF_create()★★★★
calib3d3D 视觉calibrateCamera()solvePnP()★★★★★
features2d特征工程SIFT_create()BFMatcher()★★★★☆
dnn深度学习推理readNetFromONNX()forward()★★★★★

(注:内存复杂度 ★ 表示相对 CPU 内存占用,★★★★★ 为高内存需求)

此总结融合了模块原理、代码实现、性能优化与工程实践,适合从初学者到资深开发者的全阶段学习。建议配合官方文档与实战项目(如人脸检测、视频跟踪)进行巩固,逐步构建计算机视觉工程能力。

相关文章:

OpenCV 基础模块 Python 版

OpenCV 基础模块权威指南(Python 版) 一、模块全景图 plaintext OpenCV 架构 (v4.x) ├─ 核心层 │ ├─ core:基础数据结构与操作(Mat/Scalar/Point) │ └─ imgproc:图像处理流水线(滤…...

华为HCIE网络工程师培训选机构攻略

从 官方授权机构 到 性价比黑马,结合价格、师资、通过率等维度,为你筛选出最适合的培训方案。 一、华为官方授权机构(优先推荐) 华为官方授权机构拥有 真机实验环境考官级讲师,适合预算充足、追求高通过率的学员。 机…...

Linux固定IP方法(RedHat+Net模式)

1、查看当前网关 ip route | grep default 2、配置静态IP 双击重启 3、验证...

210、【图论】课程表(Python)

题目 思路 这道题本质上是一个拓扑排序。每次先统计每个点的入度个数、然后再统计点与点之间的邻接关系,找到入度为0的点作为起始遍历点。之后每遍历到这个点之后,就把这个点后续的邻接关系边的点入度减去一。当某个点入度为0时,继续被加入其…...

使用Python开发自动驾驶技术:车道线检测模型

友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...

跟着StatQuest学知识07-张量与PyTorch

一、张量tensor 张量重新命名一些数据概念,存储数据以及权重和偏置。 张量还允许与数据相关的数学计算能够相对快速的完成。 通常,张量及其进行的数学计算会通过成为图形处理单元(GPUs)的特殊芯片来加速。但还有张量处理单元&am…...

nginx配置https域名后,代理后端服务器流式接口变慢

目录 问题描述原因解决办法 问题描述 使用nginx配置域名和https的ssl证书后,代理后端web服务器,发现流式接口比原来直接用服务器外部ip后端web服务器端口变慢了很多。 原因 在于 HTTP 和 HTTPS 在 Nginx 代理中的处理方式不同。以下几点解释了为什么 …...

前端字段名和后端不一致?解锁 JSON 映射的“隐藏规则” !!!

🚀 前端字段名和后端不一致?解锁 JSON 映射的“隐藏规则” 🌟 嘿,技术冒险家们!👋 今天我们要聊一个开发中常见的“坑”:前端传来的 JSON 参数字段名和后端对象字段名不一致,会发生…...

基于springboot的新闻推荐系统(045)

摘要 随着信息互联网购物的飞速发展,国内放开了自媒体的政策,一般企业都开始开发属于自己内容分发平台的网站。本文介绍了新闻推荐系统的开发全过程。通过分析企业对于新闻推荐系统的需求,创建了一个计算机管理新闻推荐系统的方案。文章介绍了…...

2024年数维杯数学建模C题天然气水合物资源量评价解题全过程论文及程序

2024年数维杯数学建模 C题 天然气水合物资源量评价 原题再现: 天然气水合物(Natural Gas Hydrate/Gas Hydrate)即可燃冰,是天然气与水在高压低温条件下形成的类冰状结晶物质,因其外观像冰,遇火即燃&#…...

Linux与HTTP中的Cookie和Session

HTTP中的Cookie和Session 本篇介绍 前面几篇已经基本介绍了HTTP协议的大部分内容,但是前面提到了一点「HTTP是无连接、无状态的协议」,那么到底有什么无连接以及什么是无状态。基于这两个问题,随后解释什么是Cookie和Session,以…...

linux 备份工具,常用的Linux备份工具及其备份数据的语法

在Linux系统中,备份数据是确保数据安全性和完整性的关键步骤。以下是一些常用的Linux备份工具及其备份数据的语法: 1. tar命令 tar命令是Linux系统中常用的打包和压缩工具,可以将多个文件或目录打包成一个文件,并可以选择添加压…...

C++核心语法快速整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要为学过多门语言玩家快速入门C 没有基础的就放弃吧。 全部都是精华,看完能直接上手改别人的项目。 输出内容 std::代表了这里的cout使用的标准库,避免不同库中的相同命名导致混乱 …...

STM32八股【3】------RAM和片上FLASH

1、RAM和FLASH构成 1.RAM ┌──────────────────────────┐ │ 栈区 (Stack) │ ← 从RAM顶端向下扩展(存储局部变量、函数调用信息) │--------------------------│ │ 堆区 (Heap) │ ← …...

使用HAI来打通DeepSeek的任督二脉

一、什么是HAI HAI是一款专注于AI与科学计算领域的云服务产品,旨在为开发者、企业及科研人员提供高效、易用的算力支持与全栈解决方案。主要使用场景为: AI作画,AI对话/写作、AI开发/测试。 二、开通HAI 选择CPU算力 16核32GB,这…...

深入理解Aider sends a repo map

你提到的这个链接(https://aider.chat/2023/10/22/repomap.html)是 Aider 的官方文档,介绍了一种叫做“Repo Map”(仓库地图)的功能。Aider 是一个 AI 编程辅助工具,主要通过与大语言模型(如 GP…...

【day2】数据结构刷题 栈

一 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的…...

第16章:基于CNN和Transformer对心脏左心室的实验分析及改进策略

目录 1. 项目需求 2. 网络选择 2.1 UNet模块 2.2 TransUnet 2.2.1 SE模块 2.2.2 CBAM 2.3 关键代码 3 对比试验 3.1 unet 3.2 transformerSE 3.3 transformerCBAM 4. 结果分析 5. 推理 6. 下载 1. 项目需求 本文需要做的工作是基于CNN和Transformer的心脏左心室…...

云上 Redis 迁移至本地机房

文章目录 摘要在 IDC 搭建读写分离 redis 集群一、环境准备二、部署主从架构1. 安装Redis2. 配置主节点3. 配置从节点4. 所有 Redis 节点设置开机自启动三、部署代理层(读写分离)1. 安装Twemproxy2. 配置Twemproxy3. 配置开机自启动四、高可用配置(哨兵模式)1. 配置哨兵节点…...

zabbix数据库溯源

0x00 背景 zabbix数据库如果密码泄露被登录并新增管理员如何快速发现?并进行溯源? 本文介绍数据库本身未开启access log的情况。 0x01 实践 Mysql 数据库查insert SELECT * FROM sys.host_summary_by_statement_type where statement like %insert% 查…...

ZYNQ的cache原理与一致性操作

在Xilinx Zynq SoC中,Cache管理是确保处理器与外部设备(如FPGA逻辑、DMA控制器)之间数据一致性的关键。Zynq的ARM Cortex-A9处理器包含L1 Cache(指令/数据)和L2 Cache,其刷新(Flush/Invalidate&…...

React 中useMemo和useCallback Hook 的作用,在什么场景下使用它们?

大白话React 中useMemo和useCallback Hook 的作用,在什么场景下使用它们? 在 React 里,useMemo 和 useCallback 这两个 Hook 可有用啦,能帮咱优化组件性能,避免不必要的计算和渲染。下面咱就来详细聊聊它们的作用和使…...

Android笔记之项目引用第三方库(如:Github等)

前言:原生Android开发时引用github上的仓库内容,故出此文。 方式一:使用 JitPack(推荐) 步骤 1:在项目的 build.gradle 文件中添加 JitPack 仓库 打开项目根目录下的 build.gradle 文件,在 a…...

Linux 系统性能优化高级全流程指南

Linux 系统性能优化高级全流程指南 一、系统基础状态捕获 1. 系统信息建档 除了原有的硬件、内核和存储拓扑信息收集,还增加 CPU 缓存、网络设备详细信息等。 # 硬件信息 lscpu > /opt/tuning/lscpu.origin dmidecode -t memory > /opt/tuning/meminfo.or…...

SQL Server——表数据的插入、修改和删除

目录 一、引言 二、表数据的插入、修改和删除 (一)方法一:在SSMS控制台上进行操作 1.向表中添加数据 2.对表中的数据进行修改 3.对表中的数据进行删除 (二)方法二:使用 SQL 代码进行操作 1.向表中添…...

WPF 布局中的共性尺寸组(Shared Size Group)

1. 什么是共性尺寸组? 在 WPF 的 Grid 布局中,SharedSizeGroup 允许多个 Grid 共享同一列或行的尺寸,即使它们属于不同的 Grid 也能保持大小一致。这样可以保证界面元素的对齐性,提高布局的一致性。 SharedSizeGroup 主要用于需…...

deepSeek-SSE流式推送数据

1、背景 DeepSeek作为当前最火的AI大模型, 使用的时候用户在输入框输入问题,大模型进行思考回答你,然后会有一个逐步显示的过程效果,而不是一次性返回整个答案给前端页面进行展示,为了搞清楚其中的原理,我们…...

【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...

Leetcode 3495. Minimum Operations to Make Array Elements Zero

Leetcode 3495. Minimum Operations to Make Array Elements Zero 1. 解题思路2. 代码实现 题目链接:3495. Minimum Operations to Make Array Elements Zero 1. 解题思路 这一题的话核心就是统计对任意自然数 n n n,从 1 1 1到 n n n当中所有的数字对…...

C#实现自己的Json解析器(LALR(1)+miniDFA)

C#实现自己的Json解析器(LALR(1)miniDFA) Json是一个用处广泛、文法简单的数据格式。本文介绍如何用bitParser(拥有自己的解析器(C#实现LALR(1)语法解析器和miniDFA词法分析器的生成器)迅速实现一个简单高效的Json解析器。 读者可在&#xf…...