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

OpenCV快速入门【完结】:总目录——初窥计算机视觉

文章目录

  • 前言
  • 目录
    • 1. OpenCV快速入门:初探
    • 2. OpenCV快速入门:像素操作和图像变换
    • 3. OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域
    • 4. OpenCV快速入门:图像滤波与边缘检测
    • 5. OpenCV快速入门:图像形态学操作
    • 6. OpenCV快速入门:窗口交互
    • 7. OpenCV快速入门:直方图、掩膜、模板匹配和霍夫检测
    • 8. OpenCV快速入门:目标检测——轮廓检测、轮廓的距、点集拟合和二维码检测
    • 9. OpenCV快速入门:图像分析——傅里叶变换、积分图像
    • 10. OpenCV快速入门:图像分析——图像分割和图像修复
    • 11. OpenCV快速入门:特征点检测与匹配
    • 12. OpenCV快速入门:相机标定——单目视觉和双目视觉
    • 13. OpenCV快速入门:移动物体检测和目标跟踪
  • 总结


前言

在当今的计算机视觉领域,OpenCV(Open Source Computer Vision Library)作为一个功能强大、开源的计算机视觉库,在图像处理和计算机视觉方面发挥着重要作用。它提供了丰富的功能,包括图像处理、计算机视觉、机器学习等,是许多计算机视觉项目的首选工具。
OpenCV Logo

本系列文章旨在为初学者提供一个快速入门的指南,介绍OpenCV的基础知识和应用。本系列基于OpenCV 3.4版本,从基础的像素操作到复杂的图像分析技术,涵盖了广泛的主题。每个部分不仅介绍了相关的理论基础,如算法原理和公式,还提供了大量的实践代码,使理论与实践紧密结合。希望为初入计算机视觉领域学习和实践的朋友们提供了宝贵的资源。


目录

1. OpenCV快速入门:初探

OpenCV快速入门:初探 【文章链接】

  • 什么是OpenCV: OpenCV是一个广泛使用的计算机视觉库,提供各种图像处理和视觉算法。
  • 安装OpenCV: 介绍了如何在不同操作系统上安装OpenCV,并准备好开发环境。
  • 图像读取与显示: 解释如何使用OpenCV读取图像文件,以及如何在窗口中显示它们。
  • 视频加载与摄像头调用: 讨论了从视频文件和摄像头读取数据的方法,以及如何关闭窗口和释放资源。
  • 图像的基本存储方式: 探讨了图像数据在OpenCV中如何以RGB矩阵的形式存储,包括矩阵操作和像素访问。
  • 图像保存: 演示了如何保存处理后的图像。
  • 深拷贝与浅拷贝: 解释了在图像处理中浅拷贝和深拷贝的区别及其应用。
  • 图像颜色空间: 介绍了不同的颜色空间,如RGB、灰度、HSV、LAB和YUV,及其在OpenCV中的应用。

2. OpenCV快速入门:像素操作和图像变换

OpenCV快速入门:像素操作和图像变换 【文章链接】

  • 像素操作: 本部分深入探讨了像素级别的图像处理技术,包括像素统计、图像之间的基本操作(如加法、加权混合)、二值化处理,以及使用LUT(查找表)进行高效的像素级处理。
  • 图像变换: 详细介绍了图像变换的各种方法,如旋转、缩放、平移、翻转,以及更高级的仿射和投射变换。每个变换的基本原理和代码实现都被详尽讲解,提供了对图像几何变换深入理解的机会。
  • 极坐标变换: 特别介绍了极坐标变换及其逆变换的原理和实现,这是一种特殊但实用的图像变换技术,常用于特定图像处理场景。

3. OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域

OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域 【文章链接】

  • 绘制图形: 这一部分教授了如何使用OpenCV在图像上绘制基本图形,包括直线、圆、矩形、椭圆、多边形,以及如何在图像上添加文字。还介绍了绘图函数中的可选参数使用方法,并展示了如何手工绘制OpenCV的logo。
  • 图像金字塔: 讲解了高斯金字塔和拉普拉斯金字塔的概念和应用。这部分内容对于理解图像在不同分辨率下的表示及其处理非常关键。
  • 感兴趣区域(ROI): 探讨了如何在OpenCV中定义和操作感兴趣区域(ROI),包括使用数组切片、截取方法函数和界面交互等方式。ROI在图像处理中用于聚焦特定区域进行操作或分析。

4. OpenCV快速入门:图像滤波与边缘检测

OpenCV快速入门:图像滤波与边缘检测 【文章链接】

  • 噪声种类与生成: 介绍了不同类型的噪声,包括椒盐噪声、高斯噪声和彩色噪声,以及它们在图像中的生成方式。
  • 卷积操作: 解释了卷积操作的基本原理,并展示了如何在OpenCV中实现卷积操作。
  • 线性滤波: 包括均值滤波、方框滤波、高斯滤波和可分离滤波。详细讨论了这些滤波器的原理、公式和代码实现。
  • 非线性滤波: 探讨了中值滤波和双边滤波的原理、公式和代码实现,这些滤波方法在特定情况下优于线性滤波。
  • 边缘检测: 详细介绍了Sobel算子、Scharr算子、Laplacian算子和Canny算子,包括它们的原理、公式和如何在OpenCV中实现。此外,还讲解了如何自定义边缘检测滤波器。

5. OpenCV快速入门:图像形态学操作

OpenCV快速入门:图像形态学操作 【文章链接】

  • 图像形态学基础: 包括背景介绍、像素距离的概念和度量方法、图像连通性的定义、类型和应用,以及结构元素的类型和用途。
  • 膨胀与腐蚀: 详细讲述了膨胀和腐蚀操作的原理、应用和代码实现。这些是图像形态学中最基本的操作。
  • 开运算与闭运算: 解释了开运算和闭运算的应用及其代码实现,这些操作在图像预处理和特征提取中非常重要。
  • 黑帽运算与礼帽运算: 讲解了黑帽运算和礼帽运算的应用和代码实现,这些高级形态学操作用于提取图像的特定特征。
  • 击中与击不中: 介绍了击中运算和击不中运算,以及它们在图像分析中的应用,这些运算对于特定模式的检测非常有效。
  • 细化与粗化: 讲述了细化和粗化操作的应用及其代码实现,这些操作用于调整图像中对象的大小和形状。

6. OpenCV快速入门:窗口交互

OpenCV快速入门:窗口交互 【文章链接】

  • 鼠标操作: 包括鼠标操作的基本介绍、不同类型的鼠标事件、事件标志,以及如何在OpenCV中实现鼠标交互,包括获取坐标位置、监听滚轮事件和在图像中显示鼠标坐标的方法。
  • 键盘操作: 介绍了如何通过代码捕获和响应键盘事件,以及waitKey方法的使用。
  • 添加窗口控件: 讨论了如何在OpenCV窗口中添加滑动条(Trackbar),包括基本使用和自定义滑动条回调函数。
  • 实现鼠标跟随绘制方框的交互效果: 展示了如何创建一个交互式应用,允许用户使用鼠标在窗口中绘制方框,包括代码的实现和解析。
  • 自由调节窗口图像的尺寸: 介绍了如何实现窗口中图像尺寸的动态调整,包括相应的代码实现和解释。
  • 中文显示乱码问题: 讨论了在OpenCV中处理中文显示乱码的问题,提供了解决步骤和代码实现。

7. OpenCV快速入门:直方图、掩膜、模板匹配和霍夫检测

OpenCV快速入门:直方图、掩膜、模板匹配和霍夫检测 【文章链接】

  • 直方图基础: 包括直方图的概念、作用、在OpenCV中的生成方法、归一化和均衡化的原理和实现,以及自适应均衡化和匹配的技术。
  • 掩膜技术: 介绍了掩膜的定义、作用、原理和在OpenCV中的实现方法。掩膜技术在图像处理中用于特定区域的分析和处理。
  • 模板匹配: 讨论了模板匹配的基本原理、公式和在OpenCV中的实现,包括不同场景下的应用示例。
  • 霍夫变换: 详细介绍了霍夫变换的概念、原理、步骤和公式,包括直线和圆的霍夫变换在OpenCV中的应用。霍夫变换是图像分析中用于检测几何形状的重要技术。

8. OpenCV快速入门:目标检测——轮廓检测、轮廓的距、点集拟合和二维码检测

OpenCV快速入门:目标检测——轮廓检测、轮廓的距、点集拟合和二维码检测 【文章链接】

  • 轮廓检测: 包括图像轮廓的概念、轮廓检测算法的简介、基本步骤,以及轮廓检测的函数说明,如轮廓发现、面积、周长、外接多边形、点到轮廓距离和凸包检测。还包括轮廓检测的代码实现。
  • 轮廓的距: 介绍了几种不同的轮廓距离量度,包括几何距、中心距和Hu距,以及它们的代码实现。
  • 点集拟合: 探讨了最小包围三角形和最小包围圆形的拟合方法。
  • 二维码检测: 详细介绍了使用OpenCV版本3.4.4.19qrcode库进行二维码检测的完整过程,包括图像读取、二值化、滤波处理、轮廓检测、确定“回”字形位置、确定点顺序(使用内积原理和公式)、仿射变换,以及最终的二维码解码。

9. OpenCV快速入门:图像分析——傅里叶变换、积分图像

OpenCV快速入门:图像分析——傅里叶变换、积分图像 【文章链接】

  • 傅里叶变换: 包括离散傅里叶变换(DFT)的原理、公式和代码实现。讨论了如何使用傅里叶变换进行卷积,包括卷积的原理、公式和实现方法。
  • 离散余弦变换: 解释了离散余弦变换(DCT)的原理、公式和代码实现。
  • 傅里叶逆变换: 提供了傅里叶逆变换的原理、公式和代码实现,用于将频域数据转换回时域。
  • 积分图像: 探讨了积分图像的原理和代码实现。积分图像是一种高效的图像处理技术,用于快速计算图像区域的像素和。

10. OpenCV快速入门:图像分析——图像分割和图像修复

OpenCV快速入门:图像分析——图像分割和图像修复 【文章链接】

  • 图像分割: 介绍了漫水填充法、分水岭法、GrabCut法和Mean-Shift法的原理、实现步骤和代码实现。这些方法用于将图像分割成具有不同特征的多个区域。
  • 漫水填充法: 讨论了漫水填充法的原理,实现步骤和代码实现,用于区域生长式的图像分割。
  • 分水岭法: 解释了分水岭法的原理、实现步骤和代码实现,这是一种基于形态学的图像分割技术。
  • GrabCut法: 介绍了GrabCut法的原理、实现步骤和代码实现,这是一种基于图割的图像分割方法。
  • Mean-Shift法: 讨论了Mean-Shift法的原理、实现步骤和代码实现,这是一种基于密度的非参数聚类技术。
  • 图像修复: 介绍了图像修复的基本原理,包括Telea方法和Navier-Stokes方法的原理和代码实现。
  • 修补算法: 讨论了修补算法的原理、实现步骤和OpenCV中的代码实现,包括方形和圆形补丁的修补。

11. OpenCV快速入门:特征点检测与匹配

OpenCV快速入门:特征点检测与匹配 【文章链接】

  • 角点检测: 包括角点特征的概念、特点、关键点绘制的代码实现及函数解析。讨论了Harris角点检测、Shi-Tomasi角点检测、FAST角点检测和亚像素角点检测的原理、公式、代码实现和函数解析。
  • 特征点检测: 介绍了SIFT、SURF和ORB算法的原理、代码实现和函数解析。特别注意,由于SIFT和SURF的知识产权问题,需要使用OpenCV版本3.4.2.16及其配套的opencv_contrib版本。
  • 特征点匹配: 讨论了BF匹配器、FLANN匹配器和RANSAC特征点匹配的原理、代码实现和函数解析。这些方法用于在不同图像之间匹配特征点,以实现图像对齐、识别等任务。

12. OpenCV快速入门:相机标定——单目视觉和双目视觉

OpenCV快速入门:相机标定——单目视觉和双目视觉 【文章链接】

  • 相机标定的基本原理: 包括相机模型、坐标系、相机的内部和外部参数、镜头畸变的解释、透视变换的概念,以及标定的重要性和应用场景。
  • 单目视觉: 讨论了单目视觉的原理、公式和应用领域。介绍了实现单目视觉标定的步骤,包括准备标定板、捕获标定图像、提取角点和计算内参与畸变参数。还包括单目视觉相机标定的实战应用。
  • 双目视觉: 解释了双目视觉的原理、应用和与单目视觉的对比。讨论了实现双目视觉标定的步骤和OpenCV中相关函数与方法的使用。

13. OpenCV快速入门:移动物体检测和目标跟踪

OpenCV快速入门:移动物体检测和目标跟踪 【文章链接】

  • 移动物体检测和目标跟踪技术: 概括了移动物体检测的基本概念和算法类型,以及目标跟踪的基本原理和不同的跟踪算法,如差值法、模板跟踪、特征跟踪、密度跟踪、模型跟踪和基于学习的跟踪方法。
  • 实际应用和代码实现: 讨论了各种检测和跟踪技术在实际视频或摄像头数据中的应用,包括相应的算法原理、公式及其在OpenCV中的代码实现,涉及从简单的差值法到复杂的学习式跟踪方法。

总结

本系列文章洋洋洒洒20万字,仍然无法详尽OpenCV的各个角落,堪堪一窥计算机视觉的奥秘之门。经过对OpenCV各个方面的初步探索,我们可以看到,无论是在图像处理、特征检测、物体跟踪还是在复杂的图像分析技术如傅里叶变换和机器学习方法中,OpenCV都展现了其强大的功能。

本系列博客提供了大量实践层面的代码实现,使得读者能够通过实际练习来加深对理论的理解。这种理论与实践相结合的方法,不仅提高了学习的效率,也增强了将知识应用于实际问题的能力,对于追求计算机视觉领域深入学习的人来说,是一种极其宝贵的学习方式。

相关文章:

OpenCV快速入门【完结】:总目录——初窥计算机视觉

文章目录 前言目录1. OpenCV快速入门:初探2. OpenCV快速入门:像素操作和图像变换3. OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域4. OpenCV快速入门:图像滤波与边缘检测5. OpenCV快速入门:图像形态学操作6. OpenC…...

车企数据治理实践案例,实现数据生产、消费的闭环链路 | 数字化标杆

随着业务飞速发展,某汽车制造企业业务系统数量、复杂度和数据量都在呈几何级数的上涨,这就对于企业IT能力和IT架构模式的要求越来越高。加之企业大力发展数字化营销、新能源车等业务,希望通过持续优化客户体验,创造可持续发展的数…...

深入学习锁--Lock各种使用方法

一、什么是Lock Lock是一个接口,通常所说的可重入锁是指Lock的一个实现子类ReentrantLock 二、Lock实现步骤: ①创建锁对象Lock lock new ReentrantLock(); ②加锁lock.lock(); ③释放锁lock.unlock(); import java.util.concurrent.locks.Lock; import java.util…...

计算机毕设:基于机器学习的生物医学语音检测识别 附完整代码数据可直接运行

项目视频讲解: 基于机器学习的生物医学语音检测识别 完整代码数据可直接运行_哔哩哔哩_bilibili 运行效果图: 数据展示: 完整代码: #导入python的 numpy matplotlib pandas库 import pandas as pd import numpy as np import matplotlib.pyplot as plt #绘图 import se…...

VMware安装Ubuntu系统(Server端,Desktop端步骤一样)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

Navicat 与 华为云 GaussDB 合作再升级,赋能 GaussDB 分布式数据库

2023 年第三季度,Navicat 首次支持了华为云 GaussDB 主备版数据库。经过双方团队进一步的深化合作,Navicat 完成了 GaussDB 分布式的研发适配工作,赋能 GaussDB 全域数据库产品。 GaussDB 数据库分为主备版和分布式版两种模式。主备版适用于…...

【Docker】从零开始:13.Docker安装tomcat

Docker】从零开始:13.Docker安装Tomcat 下载Tomcat镜像启动Tomcat镜像新版本Tomcat修改访问Tomact首页 下载Tomcat镜像 [rootdocker ~]# docker pull tomcat Using default tag: latest latest: Pulling from library/tomcat 0e29546d541c: Pull complete 9b829c7…...

风控规则引擎(一):Java 动态脚本

风控规则引擎(一):Java 动态脚本 日常场景 共享单车会根据微信分或者芝麻分来判断是否交押金汽车租赁公司也会根据微信分或者芝麻分来判断是否交押金在一些外卖 APP 都会提供根据你的信用等级来发放贷款产品金融 APP 中会根据很复杂规则来判…...

第五十六天|583. 两个字符串的删除操作 72. 编辑距离

583. 两个字符串的删除操作 可以求出最大子序列然后用字符串长度去减&#xff0c;也可以用删除的思路&#xff0c;如下&#xff1a; class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size()1,vector<int…...

java中Lists.newArrayList和new ArrayList的详细区别?

下面是对Lists.newArrayList()和new ArrayList<>()的详细区别进行举例说明&#xff1a; 创建具有初始数据的列表&#xff1a; java Copy code import com.google.common.collect.Lists; List<String> list1 Lists.newArrayList("apple", "banana…...

从图片或PDF文件识别表格提取内容的简单库img2table

img2table是一个基于OpenCV 图像处理的用于 PDF 和图像的表识别和提取 Python库。由于其设计基于神经网络的解决方案&#xff0c;提供了一种实用且更轻便的替代方案&#xff0c;尤其是在 CPU 上使用时。 该库的特点&#xff1a; 识别图像和PDF文件中的表格&#xff0c;包括在表…...

CSV文件中使用insert 函数在指定列循环插入不同数据

文章目录 一、系统、工具要求二、需求三、代码实现&#xff1a;四、核心代码解读五、逐行更改某一列数据六&#xff1a;实现在文件的末尾增加指定内容列 一、系统、工具要求 pandaspythoncsv Windows 系统 二、需求 我有两个文件&#xff1a; 文件一&#xff1a;subject_ma…...

【华为OD题库-064】最小传输时延I-java

题目 某通信网络中有N个网络结点&#xff0c;用1到N进行标识。网络通过一个有向无环图.表示,其中图的边的值表示结点之间的消息传递时延。 现给定相连节点之间的时延列表times[]{u&#xff0c;v&#xff0c; w)&#xff0c;其中u表示源结点&#xff0c;v表示目的结点&#xff0…...

全文检索[ES系列] - 第495篇

历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 M…...

【预计IEEE出版|EI征稿通知】第六届下一代数据驱动网络国际学术会议 (NGDN 2024)

第六届下一代数据驱动网络国际学术会议 (NGDN 2024) The Sixth International Conference on Next Generation Data-driven Networks 2024年4月26-28日 | 中国沈阳 基于前几届在英国埃克塞特 (ISPA 2020) 、中国沈阳 (TrustCom 2021) 和中国武汉 (IEEETrustCom-2022) 成功举…...

C++软件在Win平台运行总结

Windows平台&#xff1a; 1.需要安装运行库&#xff1a;无论是exe还是动态库用的哪种平台工具集(visual2010-visual2019)进行编译&#xff0c;需要安装对应的运行时库vc_redist.x64.exe/vc_redist.x86.exe。比如Exe用的是VisualStdio2010工具集编译&#xff0c;其中链接的一个…...

【数电笔记】16-卡诺图绘制(逻辑函数的卡诺图化简)

目录 说明&#xff1a; 最小项卡诺图的组成 1. 相邻最小项 2. 卡诺图的组成 2.1 二变量卡诺图 2.2 三表变量卡诺图 2.3 四变量卡诺图 3. 卡诺图中的相邻项&#xff08;几何相邻&#xff09; 说明&#xff1a; 笔记配套视频来源&#xff1a;B站&#xff1b;本系列笔记并…...

前端面试灵魂提问(1)

1.自我介绍 2.在实习中&#xff0c;你负责那一模块 3.any与unknow的异同 相同点&#xff1a;any和unkonwn 可以接受任何值 不同点&#xff1a;any会丢掉类型限制&#xff0c;可以用any 类型的变量随意做任何事情。unknown 变量会强制执行类型检查&#xff0c;所以在使用一个…...

Linux中项目部署步骤

安装jdk&#xff0c;tomcat 安装步骤 1&#xff0c;将压缩包&#xff0c;拷贝到虚拟机中。 通过工具&#xff0c;将文件直接拖到虚拟机的/home下 2&#xff0c;回到虚拟机中&#xff0c;查看/home下&#xff0c;有两个压缩文件 3&#xff0c;给压缩文件做解压缩操作 tar -z…...

cmd下查看python命令的用法

在cmd下&#xff0c;可以运行python --help或者py --help来查看python命令的用法。例如&#xff1a;...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...