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

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()函数来实现图像加法。例如,将两个图像img1img2相加的代码如下:

    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()函数来实现按位或运算。例如,将图像img1img2进行按位或运算的代码如下:

    Python复制

    result = cv2.bitwise_or(img1, img2)

    按位或运算常用于图像的合成,例如将两个图像合成在一起。此外,按位或运算还可以用于图像的逻辑运算,例如判断两个图像的像素是否满足至少一个条件。

  • 按位异或:按位异或运算可以将两个图像或一个图像与一个掩膜进行按位异或操作。在OpenCV中,可以使用cv2.bitwise_xor()函数来实现按位异或运算。例如,将图像img1img2进行按位异或运算的代码如下:

    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.opencv2.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许可的产品&…...

如何学习网络安全?有哪些小窍门?

学好网络安全其实没有所谓的捷径,也没有什么小窍门。 入门网络安全首先要有浓厚的学习兴趣,不然很容易就变成了从入门到放弃了。 其次要能静下心,踏踏实实的打好基础。如果你是零基础,建议从Web安全入手,课程难度相对…...

Dart语言的数据结构

Dart语言中的数据结构探讨 引言 Dart是一种现代化的编程语言,主要用于构建移动应用、Web应用和服务端应用。随着应用程序的复杂性日益增加,选择合适的数据结构显得尤为重要。数据结构不仅影响程序的性能,也影响程序的可维护性和可扩展性。本…...

TabPFN - 表格数据基础模型

文章目录 一、关于 TabPFN🌐TabPFN生态系统 二、快速入门🏁1、安装2、基本用法 三、使用技巧💡四、开发🛠️1、设置环境2、在提交之前3、运行测试 一、关于 TabPFN TabPFN是表格数据的基础模型,它优于传统方法&#x…...

AOF日志:宕机了Redis如何避免数据丢失?

文章目录 AOF 日志是如何实现的?三种写回策略日志文件太大了怎么办?AOF 重写会阻塞吗?小结每课一问 更多redis相关知识 如果有人问你:“你会把 Redis 用在什么业务场景下?”我想你大概率会说:“我会把它当作缓存使用&…...

MAC上安装Octave

1. 当前最新版Octave是9.3版本,需要把mac os系统升级到14版本(本人之前的版本是10版本) https://wiki.octave.org/Octave_for_macOS octave的历史版本参考此文档:Octave for macOS (outdated) - Octavehttps://wiki.octave.org/Oc…...

C 语言中二维数组的退化

目录 1. 一维数组的退化 2.字符串数组的退化 3. 二维数组的退化 3.1 为什么退化为 int (*)[4] 而不是 int **? 3.2举例说明 3.3 .总结 在 C 语言中,数组名在大多数情况下会退化为指向其第一个元素的指针,这种机制称为数组退化&#xf…...

Notion 推出捏脸应用 | Deving Weekly #15

CEF-Detector-X 现在 Chromium 占据了桌面应用的大壁江山,典型的有 Electron 框架,底层就是基于 Chromium 内核,上百 M 的臃肿包体积一直别人诟病。 CEF-Detector-X 可以检测你电脑有多少个 基于 Chromium 应用,并且会生成一份「…...

C# Linq 查询

1.Linq 查询表达式基础 Linq 查询应用程序始终将源数据视为 IEnumerable<T> 或 IQueryable<T> 集合。 LINQ查询表达式包含8个基本子句,分别为from、select、group、where、orderby、join、let和into。 子 句备注from指定数据源和范围变量select指定当执行查询…...

ES7【2016】、ES8【2017】新增特性

ES7【2016】新增特性 幂指数操作符 在ES7【2016】中新增了幂指数操作&#xff0c;幂指数操作符是**。它用于指数计算 基本语法&#xff1a;baseValue ** exponent 参数说明&#xff1a;baseValue是基数&#xff0c;exponent是指数。 let base 2; let exponent 4; let resul…...

64细分步进电机驱动器TMC2209

封装和丝印 典型电路1 典型电路2 应用 兼容设计升级 3D 打印机 打印机、POS 办公和家庭自动化 纺织、缝纫机 闭路电视&#xff0c; 安保 ATM&#xff0c; 现金回收机 暖 通 空调 电池供电设备 特点和优势 2 相步进电机&#xff0c;线圈电流&#xff08;峰值&#xff09;高达…...

C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等

在设计和出版行业中&#xff0c;字体的选择和使用对最终作品的质量有着重要影响。然而&#xff0c;有时我们可能会遇到包含未知字体的PDF文件&#xff0c;这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题&#xff0c;让我们能够更好地处理这些文件。…...

linux 安装PrometheusAlert配置钉钉告警

在 Linux 上安装 PrometheusAlert 并配置钉钉告警的步骤如下: 1. 准备工作 钉钉机器人: 在钉钉群中创建一个机器人,获取 Webhook URL。示例 Webhook URL:https://oapi.dingtalk.com/robot/send?access_token=your_dingtalk_token。PrometheusAlert 安装包: 从 Prometheus…...

【华为路由/交换机的ssh远程设置】

华为路由/交换机的ssh远程设置 R1&#xff08;client&#xff09;&#xff1a;10.1.1.1 R2&#xff08;server&#xff09;&#xff1a;10.1.1.2 R2服务端配置&#xff1a; 生成本机密钥 查看生成的密钥 设置AAA授权验证方式&#xff0c;并设置支持SSH协议 创建本地用户&…...

性能测试 - Locust WebSocket client

Max.Bai 2024.10 0. 背景 Locust 是性能测试工具&#xff0c;但是默认只支持http协议&#xff0c;就是默认只有http的client&#xff0c;需要其他协议的测试必须自己扩展对于的client&#xff0c;比如下面的WebSocket client。 1. WebSocket test Client “”“ Max.Bai W…...

html中鼠标位置信息

pageX&#xff1a;鼠标距离页面的最左边的距离&#xff0c;包括滚动条的长度。clientX&#xff1a;鼠标距离浏览器视口的左距离&#xff0c;不包括滚动条。offsetX&#xff1a;鼠标到事件源左边的距离。movementX&#xff1a;鼠标这次触发的事件的位置相对于上一次触发事件的位…...

kubernetes v1.29.XX版本HPA、KPA、VPA并压力测试

序言&#xff1a; 在大型电商、购物、直播活动期间&#xff0c;对于火爆流量的激增&#xff0c;如何保障业务稳定并且做到资源不浪费&#xff0c;自动回收。 场景&#xff1a;kubernetes 原生容器化承载业务流量&#xff08;非云环境&#xff09; 方案&#xff1a;kubernetes自…...

flutter 常用UI组件

文章目录 1. Toast 文本提示框oktoastbot_toast2. loading 加载窗flutter_easyloading3. 对话框gex dialog4.下拉刷新pull_to_refresh5. pop 窗custom_pop_up_menu6. pin code 密码框pinput7. 二维码qr_flutter8. swiper 滚动组件carousel_sliderflutter_swiper_view9. Badge 角…...

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (五、电影详情页的设计实现)

在上一篇文章中&#xff0c;完成了电影列表页的开发。接下来&#xff0c;将进入电影详情页的设计实现阶段。这个页面将展示电影的详细信息&#xff0c;包括电影海报、评分、简介以及相关影人等。将使用 HarmonyOS 提供的常用组件&#xff0c;并结合第三方库 nutpi/axios 来实现…...

hive表修改字段类型没有级连导致历史分区报错

一&#xff1a;问题背景 修改hive的分区表时有级连概念&#xff0c;指字段的最新状态&#xff0c;默认只对往后的分区数据生效&#xff0c;而之前的分区保留历史元数据状态。好处就是修改语句的效率很快&#xff0c;坏处就是如果历史分区的数据还有用&#xff0c;那就回发生分…...

云上贵州多彩宝荣获仓颉社区先锋应用奖 | 助力数字政务新突破

在信息技术应用创新的浪潮中&#xff0c;仓颉社区吸引了众多企业和开发者的积极参与&#xff0c;已有多个应用成功落地&#xff0c;展现出蓬勃的创新活力。仓颉编程语言精心遴选了在社区建设、应用创新、开源共建、技术布道等方面做出突出贡献的优秀项目应用&#xff0c;并颁发…...

JS宏进阶:JS宏中的文件系统FileSystem

FileSystem对象中包含文件和文件夹的一些基本和常见的操作接口。比如&#xff1a;判断路径是否存在、创建文件夹、创建文件、读取文件等等。他的出现可以取代文件流对txt或csv等文件的操作。官方文档网址&#xff1a;https://open.wps.cn/previous/docs/client/wpsLoad&#xf…...

XML序列化和反序列化的学习

1、基本介绍 在工作中&#xff0c;经常为了调通上游接口&#xff0c;从而对请求第三方的参数进行XML序列化&#xff0c;这里常使用的方式就是使用JAVA扩展包中的相关注解和类来实现xml的序列化和反序列化。 2、自定义工具类 import javax.xml.bind.JAXBContext; import javax.x…...

npm ERR! code CERT_HAS_EXPIRED

很不幸看到这个提示。 查了很多网上的解决方案&#xff0c;都提到一个解决方案&#xff1a; npm install -g npmlatest 靠就是执行install报的错&#xff0c;你要我通过install来解决这个问题。可见大多数人都是转发&#xff0c;从不自己试试。 第二个是看系统时间。这个基…...

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <5> 5分钟集成好caffeine并使用注解操作缓存

快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui&#xff0c;并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…...

【设计模式-结构型】装饰器模式

一、什么是装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它的核心思想是在不改变原有对象结构的情况下&#xff0c;动态地给对象增加一些功能&#xff0c;从而达到扩展功能的目的。举个例子&#xff0c;今天在家妈妈给蒸馒…...

分布式数据存储基础与HDFS操作实践(副本)

以下为作者本人撰写的报告&#xff0c;步骤略有繁琐&#xff0c;不建议作为参考内容&#xff0c;可以适当浏览&#xff0c;进一步理解。 一、实验目的 1、理解分布式文件系统的基本概念和工作原理。 2、掌握Hadoop分布式文件系统&#xff08;HDFS&#xff09;的基本操作。 …...

Linux 进程前篇(冯诺依曼体系结构和操作系统)

目录 一.冯诺依曼体系结构 1.概念 2.硬件层面的数据流 3.总结加补充 二.操作系统 (Operating System) 1.概念 2.设计OS的目的 3.定位 4.操作系统的管理 5.计算机体系的层状结构 在我们认识进程之前&#xff0c;我们先了解什么是冯诺依曼体系结构 一.冯诺依曼体系结构…...

Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器

redisson-spring-boot-starter 是 Redisson 提供的 Spring Boot 集成包&#xff0c;旨在简化与 Redis 的交互&#xff0c;包括分布式锁、缓存、消息队列、布隆过滤器等功能的实现。 Maven 依赖 在 Spring Boot 项目中添加 redisson-spring-boot-starter 依赖&#xff1a; <…...

【C语言】_字符串拷贝函数strcpy

目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版&#xff1a;基本功能判空const修饰 4.2 第二版&#xff1a;优化对于\0的单独拷贝 4.3 第三版&#xff1a;仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…...