Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)
1. OpenCV简介
1.1 OpenCV定义与功能
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它为计算机视觉应用程序提供了一个通用的基础设施,并加速了在商业产品中使用机器感知。作为BSD许可的产品,OpenCV使企业可以很容易地利用和修改代码。该库拥有超过2500个优化算法,其中包括经典和最先进的计算机视觉和机器学习算法的综合集。
OpenCV的主要功能包括:
-
图像处理:提供了丰富的图像处理函数,如滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图、图像金字塔等。
-
视频分析:支持视频的读取、写入和处理,能够进行运动检测、目标跟踪等操作。
-
特征提取与匹配:具备强大的特征提取算法,如SIFT、SURF、ORB等,可用于图像匹配、三维重建等应用。
-
机器学习:集成了多种机器学习算法,如支持向量机(SVM)、决策树、神经网络等,可用于图像分类、目标识别等任务。
-
计算摄影学:支持图像的增强、融合、超分辨率重建等操作,可用于提高图像质量和视觉效果。
-
三维重建与增强现实:提供了三维重建的算法和工具,可用于从图像或视频中重建三维场景,以及实现增强现实应用。
1.2 OpenCV应用领域
OpenCV的应用领域非常广泛,涵盖了多个行业和研究方向:
计算机视觉领域
-
人机互动:通过图像和视频分析,实现手势识别、面部表情识别等功能,使人机交互更加自然和直观。
-
物体识别:能够识别和分类图像中的各种物体,如车辆、行人、动物等,广泛应用于安防监控、智能交通等领域。
-
图像分割:将图像分割成不同的区域或对象,为后续的分析和处理提供基础,如医学图像分割、遥感图像分割等。
-
人脸识别:实现人脸的检测、识别和验证,应用于门禁系统、手机解锁、社交网络等领域。
-
动作识别:分析视频中的人物动作,用于体育训练、康复治疗、视频监控等场景。
-
运动跟踪:跟踪图像或视频中的运动目标,如车辆跟踪、人体跟踪等,可用于交通流量监测、机器人导航等。
-
机器人视觉:为机器人提供视觉感知能力,帮助机器人进行环境感知、路径规划、物体抓取等操作。
-
运动分析:分析物体的运动轨迹和速度,应用于体育分析、工业自动化等领域。
-
机器视觉:用于工业生产中的质量检测、缺陷检测、尺寸测量等,提高生产效率和产品质量。
-
结构分析:分析图像中的结构信息,如建筑物的结构、道路的状况等,应用于土木工程、交通管理等领域。
-
汽车安全驾驶:通过图像和视频分析,实现车道偏离预警、前车碰撞预警、行人检测等功能,提高驾驶安全性。
计算机操作底层技术
-
图像数据操作:提供图像数据的分配、释放、复制、设置和转换功能,支持图像和视频文件的输入输出操作。
-
矩阵和向量操作:实现矩阵积、解方程、特征值以及奇异值等线性代数算法,为图像处理和机器学习提供数学基础。
-
动态数据结构:支持列表、队列、集合、树、图等动态数据结构,方便进行数据的组织和管理。
-
基本的GUI功能:提供图像与视频显示、键盘和鼠标事件处理、滚动条等基本的图形用户界面功能,方便用户与程序进行交互。
-
图像标注:支持在图像上绘制线、二次曲线、多边形、文字等,用于图像的标注和说明。
2. OpenCV安装方法
2.1 直接命令法
直接命令法是安装OpenCV最简便的方法之一。通过Python的包管理工具pip,可以快速安装OpenCV库。在命令行中输入以下命令即可完成安装:
bash复制
pip install opencv-python
这种方法适用于大多数用户,因为它简单快捷,不需要额外的配置。不过,需要注意的是,直接命令法安装的OpenCV版本可能不是最新的,或者可能与系统中已安装的其他库存在版本冲突。此外,这种方法安装的OpenCV可能不包含一些额外的贡献模块,如opencv-contrib-python
,这些模块提供了更多的功能和算法。
2.2 使用whl文件法
使用whl文件法安装OpenCV可以提供更多的灵活性和控制。首先,需要从官方网站https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv下载与你的Python版本和操作系统架构相匹配的OpenCV whl文件。例如,如果你使用的是Python 3.8版本,在Windows操作系统上,你可能会下载类似opencv_python‑4.5.1‑cp38‑cp38‑win_amd64.whl
的文件。
下载完成后,在命令行中切换到whl文件所在的目录,然后使用pip命令进行安装:
bash复制
pip install opencv_python‑4.5.1‑cp38‑cp38‑win_amd64.whl
使用whl文件法的好处是可以精确控制安装的OpenCV版本,避免版本冲突问题。此外,这种方法还可以安装包含额外贡献模块的OpenCV版本,如opencv-contrib-python
,这些模块提供了更多的高级功能和算法,对于需要这些功能的用户来说非常有用。
2.3 Anaconda环境下安装
对于使用Anaconda环境的用户,安装OpenCV也非常简单。Anaconda是一个流行的Python数据科学平台,它提供了丰富的科学计算库和工具。在Anaconda环境中,可以通过conda命令或者pip命令来安装OpenCV。
使用conda命令安装OpenCV:
bash复制
conda install -c conda-forge opencv
或者使用pip命令安装:
bash复制
pip install opencv-python
在Anaconda环境中安装OpenCV的好处是可以更好地管理依赖关系和环境配置。Anaconda提供了强大的环境管理功能,可以轻松创建和切换不同的Python环境,这对于需要在不同项目中使用不同版本的OpenCV的用户来说非常方便。此外,Anaconda还集成了许多其他科学计算库,如NumPy、SciPy、Matplotlib等,这些库与OpenCV一起可以构建强大的计算机视觉和机器学习应用。
3. OpenCV基础函数
3.1 图像读取与显示
在使用OpenCV进行图像处理时,图像的读取与显示是最基本的操作。cv2.imread()
函数用于读取图像文件,它将图像读入为NumPy数组,适合处理.jpg、.png、.bmp、.tiff等常见格式的图像。函数原型为cv2.imread(filename, flags=1)
,其中filename
是要读取的图像文件的名称(包括路径),flags
参数用于指定读图的方式。flags
可以接受的正整数值有以下几种可能:
-
cv2.IMREAD_COLOR
:默认值,用于读取一张彩色图像。 -
cv2.IMREAD_GRAYSCALE
:以灰度模式读取图像。 -
cv2.IMREAD_UNCHANGED
:读取图像包括alpha通道。
例如,读取一张彩色图像的代码如下:
Python复制
import cv2
img = cv2.imread('path/to/image.jpg', cv2.IMREAD_COLOR)
图像的显示使用cv2.imshow()
函数,其函数原型为cv2.imshow(window_name, image)
,其中window_name
是窗口名称,image
是要显示的图像。例如:
Python复制
cv2.imshow('Image Window', img)
cv2.waitKey(0) # 等待键盘输入,参数为0表示无限等待
cv2.destroyAllWindows() # 关闭所有创建的窗口
3.2 图像保存与复制
图像的保存使用cv2.imwrite()
函数,其函数原型为cv2.imwrite(filename, img, params)
,其中filename
是要保存的文件名,img
是要保存的图像,params
是针对特定格式的参数,如JPEG图像的质量(0 - 100的整数,默认95)。例如,保存一张图像的代码如下:
Python复制
cv2.imwrite('path/to/save/image.jpg', img)
图像的复制使用img.copy()
方法,该方法返回图像的一个副本。例如:
Python复制
img_copy = img.copy()
3.3 图像颜色空间转换
图像颜色空间转换是图像处理中的一个重要环节,OpenCV提供了cv2.cvtColor()
函数来实现不同颜色空间之间的转换。函数原型为cv2.cvtColor(src, code, dstCn=None)
,其中src
是输入图像,code
是颜色空间转换的代码,dstCn
是目标图像的通道数。例如,将BGR图像转换为灰度图像的代码如下:
Python复制
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
此外,还可以进行其他颜色空间的转换,如BGR到HSV、BGR到LAB等。这些转换在图像分割、特征提取等应用中非常有用。例如,将BGR图像转换为HSV颜色空间的代码如下:
Python复制
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
通过这些基础函数,用户可以方便地进行图像的读取、显示、保存、复制以及颜色空间的转换,为后续的图像处理和分析打下坚实的基础。
4. 图像基本运算
4.1 图像算术运算
图像算术运算是图像处理中的基础操作,包括图像的加法、减法、乘法和除法等。这些运算可以用于图像的合成、增强、对比度调整等多种应用。
-
图像加法:图像加法可以将两个图像或一个图像与一个常数相加。在OpenCV中,可以使用
cv2.add()
函数来实现图像加法。例如,将两个图像img1
和img2
相加的代码如下:Python复制
result = cv2.add(img1, img2)
图像加法常用于图像的合成,例如将一个水印图像添加到另一个图像上。此外,图像加法还可以用于调整图像的亮度,通过将图像与一个常数相加来增加或减少图像的亮度。
-
图像减法:图像减法可以将两个图像或一个图像与一个常数相减。在OpenCV中,可以使用
cv2.subtract()
函数来实现图像减法。例如,将图像img1
减去图像img2
的代码如下:Python复制
result = cv2.subtract(img1, img2)
图像减法常用于图像的背景消除,例如通过减去背景图像来提取前景物体。此外,图像减法还可以用于检测图像之间的差异,例如在视频监控中检测运动物体。
-
图像乘法:图像乘法可以将两个图像或一个图像与一个常数相乘。在OpenCV中,可以使用
cv2.multiply()
函数来实现图像乘法。例如,将图像img
与常数2
相乘的代码如下:Python复制
result = cv2.multiply(img, 2)
图像乘法常用于图像的对比度增强,通过将图像与一个常数相乘来增加图像的对比度。此外,图像乘法还可以用于图像的融合,例如将两个图像按照一定的比例融合在一起。
-
图像除法:图像除法可以将两个图像或一个图像与一个常数相除。在OpenCV中,可以使用
cv2.divide()
函数来实现图像除法。例如,将图像img
除以常数2
的代码如下:Python复制
result = cv2.divide(img, 2)
图像除法常用于图像的归一化,例如将图像的像素值归一化到0到1之间。此外,图像除法还可以用于图像的去雾,例如通过将图像除以一个雾的模型来去除图像中的雾。
4.2 图像位运算
图像位运算是对图像像素的二进制位进行操作的运算,包括按位与、按位或、按位异或和按位非等。这些运算可以用于图像的掩膜操作、图像的区域提取等多种应用。
-
按位与:按位与运算可以将两个图像或一个图像与一个掩膜进行按位与操作。在OpenCV中,可以使用
cv2.bitwise_and()
函数来实现按位与运算。例如,将图像img
与掩膜mask
进行按位与运算的代码如下:Python复制
result = cv2.bitwise_and(img, img, mask=mask)
按位与运算常用于图像的掩膜操作,例如通过一个掩膜来提取图像中的特定区域。此外,按位与运算还可以用于图像的逻辑运算,例如判断两个图像的像素是否同时满足一定的条件。
-
按位或:按位或运算可以将两个图像或一个图像与一个掩膜进行按位或操作。在OpenCV中,可以使用
cv2.bitwise_or()
函数来实现按位或运算。例如,将图像img1
和img2
进行按位或运算的代码如下:Python复制
result = cv2.bitwise_or(img1, img2)
按位或运算常用于图像的合成,例如将两个图像合成在一起。此外,按位或运算还可以用于图像的逻辑运算,例如判断两个图像的像素是否满足至少一个条件。
-
按位异或:按位异或运算可以将两个图像或一个图像与一个掩膜进行按位异或操作。在OpenCV中,可以使用
cv2.bitwise_xor()
函数来实现按位异或运算。例如,将图像img1
和img2
进行按位异或运算的代码如下:Python复制
result = cv2.bitwise_xor(img1, img2)
按位异或运算常用于图像的差异检测,例如检测两个图像之间的差异。此外,按位异或运算还可以用于图像的加密和解密,例如通过一个密钥对图像进行加密和解密。
-
按位非:按位非运算可以对一个图像进行按位非操作。在OpenCV中,可以使用
cv2.bitwise_not()
函数来实现按位非运算。例如,对图像img
进行按位非运算的代码如下:Python复制
result = cv2.bitwise_not(img)
按位非运算常用于图像的反相处理,例如将图像的亮部变为暗部,暗部变为亮部。此外,按位非运算还可以用于图像的逻辑运算,例如对图像的像素进行取反操作。
5. 图像格式转换
5.1 Image.open与cv2.imread区别
Image.open
和 cv2.imread
是 Python 中两种常用的图像读取方法,它们分别属于 PIL 库和 OpenCV 库。这两种方法在功能和使用上有一些显著的区别。
-
返回类型:
Image.open
返回的是一个 PIL 图像对象,这个对象提供了丰富的图像处理方法,可以直接用于图像的显示、裁剪、旋转等操作。而cv2.imread
返回的是一个 NumPy 数组,这个数组可以方便地进行像素级的操作和数学计算,适合进行复杂的图像处理算法实现。 -
颜色通道顺序:
Image.open
读取的图像是 RGB 格式,即红色、绿色、蓝色通道的顺序。而cv2.imread
读取的图像是 BGR 格式,即蓝色、绿色、红色通道的顺序。这在进行图像处理时需要注意,因为颜色通道的顺序会影响图像的颜色显示和处理结果。 -
文件支持格式:PIL 库的
Image.open
支持多种图像文件格式,如 JPEG、PNG、GIF、BMP 等。OpenCV 的cv2.imread
也支持多种格式,但在某些特殊格式的支持上可能与 PIL 有所不同。例如,PIL 对一些古老的图像格式或特殊的图像编码格式有更好的支持,而 OpenCV 在处理视频帧和实时图像流方面更加强大。 -
读取效率:在读取图像的速度上,
cv2.imread
通常比Image.open
更快。这是因为 OpenCV 库在底层进行了大量的优化,特别是在处理大型图像和批量图像读取时,cv2.imread
的效率优势更加明显。然而,对于一些简单的图像处理任务,这种速度差异可能并不显著。
5.2 格式相互转换
在实际的图像处理项目中,我们可能需要在 PIL 图像对象和 OpenCV 的 NumPy 数组之间进行转换,以便利用各自库的优势进行图像处理。以下是如何进行这两种格式相互转换的方法。
-
PIL 转 OpenCV:
Python复制
from PIL import Image import numpy as np import cv2# 使用 PIL 读取图像 pil_image = Image.open('path/to/image.jpg') # 将 PIL 图像转换为 OpenCV 的 NumPy 数组 # 注意:需要将 RGB 格式转换为 BGR 格式 cv_image = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
-
OpenCV 转 PIL:
Python复制
import cv2 from PIL import Image# 使用 OpenCV 读取图像 cv_image = cv2.imread('path/to/image.jpg') # 将 OpenCV 的 NumPy 数组转换为 PIL 图像 # 注意:需要将 BGR 格式转换为 RGB 格式 pil_image = Image.fromarray(cv2.cvtColor(cv_image, cv2.COLOR_BGR2RGB))
通过上述转换方法,我们可以在 PIL 和 OpenCV 之间灵活地进行图像格式的转换,从而充分利用两个库的功能,实现更加丰富和高效的图像处理效果。
6. 总结
在本篇研究报告中,我们详细探讨了OpenCV库的多个关键方面,从其基本功能到安装方法,再到基础函数的应用以及图像基本运算,最后讨论了图像格式的转换。以下是对这些内容的总结:
6.1 OpenCV简介
-
定义与功能:OpenCV是一个开源的计算机视觉和机器学习软件库,拥有超过2500个优化算法,涵盖了图像处理、视频分析、特征提取与匹配、机器学习、计算摄影学、三维重建与增强现实等多个领域。
-
应用领域:其应用广泛,包括人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人视觉、运动分析、机器视觉、结构分析、汽车安全驾驶等计算机视觉领域,以及图像数据操作、矩阵和向量操作、动态数据结构、基本的GUI功能、图像标注等计算机操作底层技术。
6.2 OpenCV安装方法
-
直接命令法:通过pip安装
opencv-python
,简单快捷,但可能面临版本冲突或缺少额外贡献模块的问题。 -
使用whl文件法:从官网下载对应版本的whl文件后使用pip安装,可精确控制版本,适合需要特定版本或额外功能的用户。
-
Anaconda环境下安装:利用conda或pip在Anaconda环境中安装,便于管理依赖和环境配置,适合数据科学和多环境管理的用户。
6.3 OpenCV基础函数
-
图像读取与显示:使用
cv2.imread()
读取图像,cv2.imshow()
显示图像,支持多种图像格式和读取模式。 -
图像保存与复制:通过
cv2.imwrite()
保存图像,img.copy()
复制图像,方便图像的持久化存储和操作备份。 -
图像颜色空间转换:借助
cv2.cvtColor()
实现不同颜色空间的转换,如BGR到灰度、HSV等,为图像处理提供灵活性。
6.4 图像基本运算
-
图像算术运算:包括加法、减法、乘法、除法,用于图像合成、增强、对比度调整等。
-
图像位运算:涵盖按位与、或、异或、非,适用于图像掩膜、区域提取、差异检测等操作。
6.5 图像格式转换
-
Image.open与cv2.imread区别:
Image.open
返回PIL图像对象,支持RGB格式;cv2.imread
返回NumPy数组,采用BGR格式。两者在文件支持格式和读取效率上各有特点。 -
格式相互转换:提供了PIL到OpenCV和OpenCV到PIL的转换方法,通过颜色空间转换实现格式互转,使用户能够结合两个库的优势进行图像处理。
通过本报告的深入分析,读者可以全面了解OpenCV库的强大功能和应用范围,掌握其安装和使用方法,以及如何通过基础函数和图像运算实现高效的图像处理。同时,对图像格式转换的讨论也为跨库图像处理提供了实用的指导。
相关文章:
Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)
1. OpenCV简介 1.1 OpenCV定义与功能 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它为计算机视觉应用程序提供了一个通用的基础设施,并加速了在商业产品中使用机器感知。作为BSD许可的产品&…...
leetcode707-设计链表
leetcode 707 思路 本题也是用了虚拟头节点来进行解答,这样的好处是,不管是头节点还是中间的节点都可以当成是中间节点来处理,用同一套方法就可以进行处理,而不用考虑太多的边界条件。 下面题目中最主要的实现就是添加操作addA…...
Linux操作命令之云计算基础命令
一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…...
HTML<bdo>标签
例子 指定文本方向: <bdo dir"rtl"> This text will go right-to-left. </bdo> <!DOCTYPE html> <html> <body> <h1>The bdo element</h1> <p>This paragraph will go left-to-right.</p> …...
将IDLE里面python环境pyqt5配置的vscode
首先安装pyqt5全套:pip install pyqt5-tools 打开Vscode: 安装第三方扩展:PYQT Integration 成功配置designer.exe的路径【个人安装pyqt5的执行路径】,便可直接打开UI文件,进行编辑。 配置pyuic,如果下图填写方法使用…...
【C++】结构体(下)
4、结构体指针 作用:通过指针访问结构体中的成员 利用操作符“----->”可以通过结构体指针访问结构体成员。 示例: #include<iostream> #include<string> using namespace std; struct student {//姓名string name;//年龄int age;//分数…...
YOLOv10-1.1部分代码阅读笔记-dataset.py
dataset.py ultralytics\data\dataset.py 目录 dataset.py 1.所需的库和模块 2.class YOLODataset(BaseDataset): 3.class ClassificationDataset(torchvision.datasets.ImageFolder): 4.def load_dataset_cache_file(path): 5.def save_dataset_cache_file(prefix,…...
【电视盒子】HI3798MV300刷机教程笔记/备份遥控码修复遥控器/ADB/线刷卡刷/电视盒子安装第三方应用软件
心血来潮,看到电视机顶盒满天飞的广告,想改造一下家里的电视盒子,学一下网上的人刷机,但是一切都不知道怎么开始,虽然折腾了一天,以失败告终,还是做点刷机笔记。 0.我的机器 年少不会甄别&…...
Mixly米思齐1.0 2.0 3.0 软件windows版本MAC苹果电脑系统安装使用常见问题与解决
Mixly软件应用常见问题 Mixly米思齐编译或上传报错? 1、软件安装与驱动(Mixly1-2) 1-1 Windows版本 软件及驱动可以在Mixly群(QQ群号621937623)的群文件夹中找到,或到Mixly在线软件下载链接中重新下安装…...
在 QNAP NAS中使用 Container Station 运行 Docker 的完整指南
QNAP 为用户提供了一个名为 Container Station 的应用,它在 QNAP NAS 上将 Docker 和 LXC 结合在一起,通过图形化界面,让用户更轻松地在 NAS 上管理容器。本文将带你一步步了解如何在 QNAP NAS 上安装和使用 Container Station,以…...
Spark RPC 学习总结
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:https://www.captainai.net/dongkelun 前言 本文从API层面学习总结Spark RPC,暂不涉及源码分析。 Spark 通信历史 最开始: …...
JAVA安全—JWT攻防Swagger自动化Druid泄露
前言 依旧是Java安全的内容,今天主要是讲JWT这个东西,JWT之前讲过了,是Java中特有的身份校验机制,原理我就不再多说了,主要是看看它的安全问题,至于Swagger和Druid顺便讲一下。 Druid泄露 Druid是阿里巴…...
深度学习核函数
一、核函数的基本概念 核函数在机器学习中具有重要应用价值,常用于支持向量机(SVM)等算法中。 核函数是面试中经常被考到的知识点,对于找工作和实际数据转换都有重要作用。 二、数据建模与核函数的作用 数据越多,可…...
【神经网络基础】
目录 一、神经网络的构成 1.1什么是神经网络? 1.2 激活函数 1.2.1 Sigmoid 1.2.2 Tanh 1.2.3 ReLU 1.2.4 softmax 1.2.5 其他激活函数 1.2.6 选择激活函数 1.3 参数初始化 1.4 模型构建 二、损失函数 2.1 分类问题 2.1.1多分类(多分类交叉…...
一些面试常见问题及其回答参考
1、请你自我介绍一下你自己? 回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研…...
[JavaScript] 深入理解流程控制结构
文章目录 1. **if-else 语句**基本语法:示例:扩展:else if 2. **switch-case 语句**基本语法:示例:注意事项: 3. **for 循环**基本语法:示例:扩展:for-in 和 for-of 4. *…...
Mysql常见问题处理集锦
Mysql常见问题处理集锦 root用户密码忘记,重置的操作(windows上的操作)MySQL报错:ERROR 1118 (42000): Row size too large. 或者 Row size too large (> 8126).场景:报错原因解决办法 详解行大小限制示例:内容来源于网…...
高级java每日一道面试题-2025年01月19日-框架篇[Mybatis篇]-MyBatis 中见过什么设计模式 ?
如果有遗漏,评论区告诉我进行补充 面试官: MyBatis 中见过什么设计模式 ? 我回答: 1. 工厂模式(Factory Pattern) 定义:工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式,将对象创建过程抽象化ÿ…...
C++,设计模式,【目录篇】
文章目录 1. 简介2. 设计模式的分类2.1 创建型模式(Creational Patterns):2.2 结构型模式(Structural Patterns):2.3 行为型模式(Behavioral Patterns): 3. 使用设计模式…...
C/C++内存管理(超详解)
目录 1.C/C内存分布 2.C语言动态内存管理 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 3.C动态内存管理 3.1new/delete操作内置类型 3.2new/delete操作自定义类型 3.3operator new与operator delete函数 3.4定位new表达式(placement-new) 1.C/C内存分布 内存中是如…...
【前端】用OSS增强Hexo的搜索功能
文章目录 前言配置 _config.fluid.yml云端实时更新 local-search.xml解决 OSS.Bucket 的跨域问题 前言 原文地址:https://blog.dwj601.cn/FrontEnd/Hexo/hexo-enhance-local-search-with-oss/ 考虑到某著名云服务商提供的云服务器在两年的 99 计划后续费价格高达四…...
智慧校园平台中的信息处理与技术应用
随着信息技术的迅速发展,智慧校园平台已经成为现代教育领域的重要组成部分。智慧校园平台不仅能够提高教学效率,还能够改善学生的学习体验,以及优化学校的管理流程。为了实现这些目标,信息处理技术在智慧校园平台的应用中扮演了至…...
Spring MVC(一)
RestController RestController 是由 Controller 和 ResponseBody 两个注解构成的。 Spring 启动的时候会扫描所有包含 Controller 或者 RestController 注解的类,创建出对外的接口,这样外界就可以从这里与服务器实现交互,如果没有这个注解…...
【王树森搜索引擎技术】概要01:搜索引擎的基本概念
1. 基本名词 query:查询词SUG:搜索建议文档:搜索结果标签/筛选项 文档单列曝光 文档双列曝光 2. 曝光与点击 曝光:用户在搜索结果页上看到文档,就算曝光文档点击:在曝光后,用户点击文档&…...
imbinarize函数用法详解与示例
一、函数概述 众所周知,im2bw函数可以将灰度图像转换为二值图像。但MATLAB中还有一个imbinarize函数可以将灰度图像转换为二值图像。imbinarize函数是MATLAB图像处理工具箱中用于将灰度图像或体数据二值化的工具。它可以通过全局或自适应阈值方法将灰度图像转换为二…...
ThinkPHP 8的一对多关联
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...
医工交叉合作信息汇总,第三期名单分享,近期需要联合申请基金以及课题合作的老师/同学重点关注一下!|合作信息·25-01-17
小罗碎碎念 之前出过两期医工交叉领域合作信息的汇总推送,最近一直没顾上这事,现在重新捡起来,并且把需求向所有的粉丝公开,直接在后台回复“合作信息”就可以获取表格。 截至目前为止,共收集了92条合作信息…...
深度学习中的张量 - 使用PyTorch进行广播和元素级操作
深度学习中的张量 - 使用PyTorch进行广播和元素级操作 元素级是什么意思? 元素级操作在神经网络编程中与张量的使用非常常见。让我们从一个元素级操作的定义开始这次讨论。 一个_元素级_操作是在两个张量之间进行的操作,它作用于各自张量中的相应元素…...
浅谈云计算20 | OpenStack管理模块(下)
OpenStack管理模块(下) 五、存储管理5.1 存储管理概述 5.2 架构设计5.2.1 Cinder块存储架构5.2.2 Swift对象存储架构 六、网络管理6.1 网络管理概述6.2 架构解析6.2.1 Neutron网络服务架构6.2.2 网络拓扑架构 6.3 原理与流程6.3.1 网络创建原理6.3.2 网络…...
GitLab集成Jira
GitLab与Jira集成的两种方式 GitLab 提供了两种 Jira 集成,即Jira议题集成和Jira开发面板集成,可以配置一个或者两个都配置。 具体集成步骤可以参考官方文档Jira 议题集成(极狐GitLab文档)和Jira 开发面板集成(极狐G…...
如何用selenium来链接并打开比特浏览器进行自动化操作(1)
前言 本文是该专栏的第76篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将基于“比特浏览器”,通过selenium来实现链接并打开比特浏览器,进行相关的“自动化”操作。 值得一提的是,在本专栏之前,笔者有详细介绍过“使用selenium或者pyppeteer(puppeteer)…...
Docker私有仓库管理工具Registry
Docker私有仓库管理工具Registry 1 介绍 Registry是私有Docker仓库管理工具,Registry没有可视化管理页面和完备的管理策略。可借助Harbor、docker-registry-browser完成可视化和管理。Harbor是由VMware开发的企业级Docker registry服务。docker-registry-browser是…...
《Hands_On_LLM》8.1 语义搜索和 RAG 概述(Semantic Search and RAG)
说明 接下来的这三篇文章是《On Large Language Models》的第8章:语义搜索和检索增强生成(Retrieval-Augmented Generation)的翻译。 概述 搜索是最早被业界广泛采用的语言模型应用之一。在开创性论文《BERT:用于语言理解的深度…...
C++实现设计模式---迭代器模式 (Iterator)
迭代器模式 (Iterator) 迭代器模式 是一种行为型设计模式,它提供了一种方法,顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 意图 提供一种方法,可以顺序访问一个容器对象中的元素,而无需暴露其…...
skywalking的使用
面试常问的面试题: 你们的服务监控怎么做的? 其实就可以回答skywalking,skywalking是一个开源的分布式追踪与性能监视平台,特别适用于微服务架构、云原生环境以及基于容器(如Docker、Kubernetes)的应用部…...
【C语言系列】深入理解指针(1)
前言 总所周知,C语言中指针部分是非常重要的,这一件我们会介绍指针相关的内容,当然后续我还会出大概4篇与指针相关的文章,来深入的讲解C语言指针部分,希望能够帮助到指针部分薄弱或者根本不会的程序员们,后…...
医院挂号就诊系统设计与实现(代码+数据库+LW)
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装医院挂号就诊系统软件来发挥其高效地信息处理的作用&#…...
Mysql 主从复制原理及其工作过程,配置一主两从实验
主从原理:MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作…...
verilog笔记1
1. 阻塞赋值 阻塞赋值,顾名思义即在一个 always 块中,后面的语句会受到前语句的影响,具体来说就是在同一个always 中,一条阻塞赋值语句如果没有执行结束,那么该语句后面的语句就不能被执行,即被“阻塞”。也…...
人工智能之数学基础:线性代数中的线性相关和线性无关
本文重点 在线性代数的广阔领域中,线性相关与线性无关是两个核心概念,它们对于理解向量空间、矩阵运算、线性方程组以及人工智能等问题具有至关重要的作用。 定义与直观理解 当存在一组不全为0的数x1,x2,...,xn使得上式成立的时候,那么此时我们可以说向量组a1,a2...,an…...
Flask简介与安装以及实现一个糕点店的简单流程
目录 1. Flask简介 1.1 Flask的核心特点 1.2 Flask的基本结构 1.3 Flask的常见用法 1.3.1 创建Flask应用 1.3.2 路由和视图函数 1.3.3 动态URL参数 1.3.4 使用模板 1.4 Flask的优点 1.5 总结 2. Flask 环境创建 2.1 创建虚拟环境 2.2 激活虚拟环境 1.3 安装Flask…...
Ubuntu22.04安装paddle GPU版本
文章目录 确立版本安装CUDA与CUDNN安装paddle 确立版本 查看官网信息,确立服务版本:https://www.paddlepaddle.org.cn/documentation/docs/zh/2.6/install/pip/linux-pip.html 安装CUDA与CUDNN 通过nvidia-smi查看当前显卡驱动版本: 通过…...
读《SQL经典实例》学数据库(系列一)
目录 友情提醒第一章、数据库简述1.1)数据库简述1.2)常见的数据库软件1.3)MySQL数据库安装 第二章、SQL语句分类2.1)操作数据仓库/数据表:DDL2.1.1)创建数据仓库/数据表2.1.2)删除数据仓库/数据表2.1.3&…...
Android系统开发(一):AOSP 架构全解析:开源拥抱安卓未来
引言 当我们手握智能手机,流畅地滑动屏幕、切换应用、欣赏动画时,背后其实藏着一套庞大且精密的开源系统——Android AOSP(Android Open Source Project)。这套系统不仅是所有安卓设备的根基,也是系统开发者的终极 pl…...
git系列之revert回滚
1. Git 使用cherry-pick“摘樱桃” step 1: 本地切到远程分支,对齐要对齐的base分支,举例子 localmap git pull git reset --hard localmap 对应的commit idstep 2: 执行cherry-pick命令 git cherry-pick abc123这样就会将远程…...
【统计的思想】假设检验(一)
假设检验是统计学里的重要方法,同时也是一种“在理想与现实之间观察求索”的测试活动。假设检验从概率的角度去考察理想与现实之间的关系,籍此来缓解测试可信性问题。 我们先来看一个例子。民航旅客服务系统,简称PSS系统,有一种业…...
Linux 管道操作
Linux 管道操作 在 Linux 中,管道(Pipe)是一个非常强大且常用的功能,它允许将一个命令的输出直接传递给另一个命令作为输入,从而能够高效地处理和分析数据。管道在多个命令之间建立数据流,减少了文件的读写…...
Rust 数据类型详解
一、标量类型(Scalar Types) 标量类型代表一个单独的值。Rust 中有四大基本标量类型:整数(integer)、浮点数(floating-point number)、布尔(boolean)和字符(…...
(十四)WebGL纹理坐标初识
纹理坐标是 WebGL 中将 2D 图像(纹理)应用到 3D 物体表面的重要概念。在 WebGL 中,纹理坐标通常使用一个二维坐标系,称为 uv 坐标,它们决定了纹理图像如何映射到几何体上。理解纹理坐标的核心就是明白它们如何将二维纹…...
青少年CTF练习平台 EasyMD5解题思路
题目 EasyMD5 PHP弱类型/弱等于的判断 翻译 上传之后网页提示:Not a PDF! angry!!! get out from my page 修改文件后缀为pdf 再次上传,答案出来了 s878926199a s155964671a 成功获取flag...