计算机视觉cv2入门之图像的读取,显示,与保存

news2025/3/14 13:38:41

        在计算机视觉领域,Python的cv2库是一个不可或缺的工具,它提供了丰富的图像处理功能。作为OpenCV的Python接口,cv2使得图像处理的实现变得简单而高效。

 示例图片


目录

opencv获取方式

图像基本知识

颜色空间

RGB

HSV

图像格式

BMP格式

  TIFF格式

GIF格式

JPEG格式

PNG格式

读取图像cv2.imread()

  imread各flags参数含义详解

读取结果说明

Ndarray说明

获取单通道颜色矩阵

显示图像

使用cv2.imshow()显示图像

cv2.waitKey()

cv2.destroyAllWindows()

使用plt.imshow()显示图像

保存图像cv2.imwrite()

总结


 opencv获取方式

pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple opencv-python

图像基本知识

颜色空间

        颜色空间是一种用来表示颜色的数学模型,它描述了如何将颜色信息数字化,以便于计算机进行处理和分析。在计算机视觉和图像处理领域,常见的颜色空间包括RGB、HSV等。

RGB

        RGB颜色空间是最常用的颜色空间之一,它基于红(Red)、绿(Green)、蓝(Blue)三种基本颜色,通过调整这三种颜色的强度和组合,可以产生各种颜色。

        在RGB颜色空间中,每个颜色的强度值范围通常在0到255之间,分别代表红、绿、蓝三种颜色的亮度。通过调整这些亮度值,可以混合出各种颜色。例如,当RGB三个通道的强度值都为0时,表示黑色;当RGB三个通道的强度值都为255时,表示白色。

RGB颜色调色板 

        HEX是一种常用于网页设计和图像处理中的颜色表示方法,它通过六位十六进制数来表示RGB颜色空间中的颜色。在HEX表示法中,前两位代表红色强度,中间两位代表绿色强度,最后两位代表蓝色强度。 

        通过改变这三个值的不同组合,可以得到一个包含2^24=16777216种颜色的调色板,但是人眼可见的却远远少于这个数字。

        例如我们总是认为乌鸦是黑色的,但其实在不同的光照条件下,乌鸦的羽毛可能会呈现出彩色的光泽。这正是因为RGB颜色空间虽然能够表示大量的颜色,但人眼的颜色感知却受到环境、光照等多种因素的影响。

 乌鸦羽毛五彩斑斓的黑

HSV

        HSV(Hue, Saturation, Value)是根据颜色的直观特性 色调(Hue)、饱和度(Saturation)和明度(Value)三个参数。由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。

 HSV分量可以通过RGB各分量值转化得到,计算公式如下:

其中,R,G,B分别为RGB颜色空间中的3个分量。 


图像格式

常见的图像格式有BMP格式,TiIFF格式,GIF格式,JPEG格式,PNG格式等。

BMP格式

        BMP格式是windows环境中的一种标准(但很多Microsoft应用程序不支持它),这种格式采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

  TIFF格式

        TIFF格式是一种灵活的图像存储格式,广泛应用于印刷、出版和扫描领域。它支持多种色彩模式,包括灰度、RGB、CMYK等,并允许无损压缩,以在保证图像质量的同时减少文件大小。TIFF格式还支持多层图像和透明度,使其在处理复杂图像时具有显著优势。此外,TIFF格式具有良好的兼容性,能够被多种图像编辑和处理软件所支持。

GIF格式

        GIF格式是一种广泛用于网络传输的图像格式。GIF格式以其独特的无损压缩技术和支持透明背景的特性而著称,这使得GIF图像在保持高质量的同时,文件大小相对较小,非常适合在网络上快速加载和显示。此外,GIF格式还支持动画效果,能够创建简单的动态图像,这一特性使其在社交媒体和网页设计中备受欢迎。尽管GIF格式的色彩深度有限,通常只能显示256种颜色,但这并不妨碍它在特定应用场景下的广泛应用。

JPEG格式

        JPEG格式源自对相对静止灰度或彩色图像的一种压缩标准,在使用有损压缩方法时可节省的空间是相当大的,目前数码相机中均使用这种格式。尽管JPEG格式采用有损压缩,可能会导致一定的图像质量损失,但通过调整压缩级别,用户可以在图像质量和文件大小之间找到理想的平衡点。这种灵活性使得JPEG格式成为存储和传输大量图片的优选方案,尤其是在存储空间有限或网络带宽受限的情况下。此外,JPEG格式还具有良好的跨平台兼容性,几乎可以被所有主流的图像查看器和编辑器所支持。

PNG格式

        PNG是一种无损压缩的图像格式,支持透明背景和Alpha通道,使得图像在保持高质量的同时,还能展现出更为丰富的层次感和细腻度。与GIF格式相比,PNG格式在色彩深度上不再受限,能够显示1600多万种颜色,这为图像的色彩表现提供了更广阔的空间。此外,PNG格式还支持多种图像编辑功能,如伽玛校正、文本注释等,进一步增强了其在图像处理和编辑领域的实用性。由于其无损压缩的特性,PNG格式在需要保持图像原始质量和细节的应用场景中,如网页设计中的图标、按钮等,具有不可替代的优势。

需要注意的是PNG格式的图片相对于其他格式图片来说,除了RGB三通道以外还多了一层alpha通道,这一层alpha通道使得PNG图片支持透明度设置,即可以实现图片的半透明效果,或者是抠图后的图片背景透明化。


读取图像cv2.imread()

#cv2.imread读取图像
import cv2
image=cv2.imread(filename='test.jpg',flags=cv2.IMREAD_UNCHANGED)
#filename:图像文件的路径
#flags:
    #cv2.IMREAD_COLOR:BGR格式彩色图像 
    #cv2.IMREAD_GRAYSCALE:灰度图像,是单通道的 
    #cv2.IMREAD_UNCHANGED:包括alpha通道,即透明通道
    #cv2.IMREAD_COLOR_BGR,以BGR格式读取图像,彩色
    #cv2.IMREAD_COLOR_RGB,以RGB格式读取图像,彩色
    #cv2.IMREAD_ANYDEPTH:读取任意深度的图像
    #cv2.IMREAD_ANYCOLOR:读取任意颜色的图像
    #cv2.IMREAD_LOAD_GDAL:使用GDAL读取图像
    #cv2.IMREAD_REDUCED_COLOR_2:读取1/2的彩色图像
    #cv2.IMREAD_REDUCED_COLOR_4:读取1/4的彩色图像
    #cv2.IMREAD_REDUCED_COLOR_8:读取1/8的彩色图像
    #cv2.IMREAD_REDUCED_GRAYSCALE_2:读取1/2的灰度图像
    #cv2.IMREAD_REDUCED_GRAYSCALE_4:读取1/4的灰度图像
    #cv2.IMREAD_REDUCED_GRAYSCALE_8:读取1/8的灰度图像
    #cv2.IMREAD_IGNORE_ORIENTATION:忽略图像的方向信息
    #cv2.IMREAD_COLOR是默认值,读取的图像是彩色BGR格式相当与cv2.IMREAD_COLOR_BGR
print(image.shape)

  cv2.imread()函数各flags参数含义详解

                cv2.imread()函数只有两个参数,filename与flages,filename指图像文件路径,flags是指定图像读取的方式。

以下是所有flags释义:
         

flags
cv2.IMREAD_COLOR读取彩色图像
cv2.IMREAD_GRAYSCALE读取单通道的灰度图像
cv2.IMREAD_UNCHANGED:按照图像原格式读取图像,若图像是png图像那么包括alpha通道,即透明通道,此时图像是四通道的,若图像不是png格式那么还是三通道。
 cv2.IMREAD_COLOR_BGR以BGR格式读取图像,彩色
 cv2.IMREAD_COLOR_RGB以RGB格式读取图像,彩色
cv2.IMREAD_ANYDEPTH读取任意深度的图像
 cv2.IMREAD_ANYCOLOR读取图像时自动检测并保留图像的原始颜色通道数。
cv2.IMREAD_LOAD_GDAL使用GDAL读取图像。GDAL 是专门用于处理地理空间数据格式的库,如 GeoTIFF、ENVI、HFA 等。
cv2.IMREAD_REDUCED_COLOR_2读取1/2的彩色图像
cv2.IMREAD_REDUCED_COLOR_4读取1/4的彩色图像
 cv2.IMREAD_REDUCED_COLOR_8:读取1/8的彩色图像
cv2.IMREAD_REDUCED_GRAYSCALE_2读取1/2的灰度图像
cv2.IMREAD_REDUCED_GRAYSCALE_4读取1/4的灰度图像
cv2.IMREAD_REDUCED_GRAYSCALE_8读取1/8的灰度图像
cv2.IMREAD_IGNORE_ORIENTATION忽略图像的方向信息

读取结果说明

Ndarray说明

          Ndarray的一般结构为:

[行数,列数,深度]

        其中行和列都是一维数组,我们知道行*列便可以构成矩阵,而深度则用来表示不同的行*列构成的矩阵的在最外层的数组中的索引。简而言之,Ndarray就是数组内嵌套矩阵的格式,这样会十分方便理解。

          上述代码中的image为读取结果,由于我们的示例图片是.jpg格式没有alpha通道,所以flags使用cv2.IMREAD_UNCHANGED与cv2.IMREAD_COLOR并没有区别,通道数都为3。

 image的shape:(1161, 1080, 3)

        cv2.imread()函数的结果是ndarray,我们打印出其shape的结果中前两个参数是图像的高与宽,第三个参数是image的维度,这里的维度其实就是图像的RGB通道数。

获取单通道颜色矩阵

        倘若我们想要分别切片获取image的三个通道数对应的颜色矩阵,那么我们可以这样写:

blue=image[:,:,0]
green=image[:,:,1]
red=image[:,:,2]
#或者
blue=image[0:1161,0:1080,0]
green=image[0:1161,0:1080,1]
red=image[0:1161,0:1080,2]

           在第一种写法中,这里要说明一下的是,Ndarray的切片方法与python的list切片方法一致,切片时有一个特殊用法就是[:],它相当与[0:len(array)]用来直接获取整个数组所有值,倘若你要是不知道某一维这个数组的长度(比如上边我们读取的图像高1161宽1080,直接切片需[0:1161,0:1080]),又想获取整个数组的所有内容,可以使用这种方法。

        当然,为了方便,cv2已经内置了split函数替我们直接获取三个颜色通道的矩阵。

blue,green,red=cv2.split(image)

显示图像

使用cv2.imshow()显示图像

import cv2#opencv读取的格式是BGR
image=cv2.imread('test.jpg')
image=cv2.resize(image,(500,500))#更改一下图像大小,为了方便显示
cv2.imshow('image',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

        这里的image是一个shape为(500,500,3)的ndarray,表示这是一个500x500像素的彩色图像,具有红、绿、蓝三个颜色通道。每个颜色通道都是一个500x500的二维数组。

结果

cv2.waitKey()

        cv2.waitKey()函数是用来在OpenCV库中暂停程序执行并等待用户按键的函数。这个函数通常在显示图像时使用,比如在一个窗口中显示图像后,我们希望程序在用户按下任意键后再继续执行后续操作,这时就可以使用cv2.waitKey()函数。该函数接受一个整数参数,表示等待的毫秒数。如果参数为0,则表示无限期等待,直到用户按下键盘上的任意键。在按下键后,cv2.waitKey()会返回按键的ASCII码值,我们可以根据这个返回值来判断用户按下了哪个键。

        需要注意的是,在使用cv2.waitKey()之前,必须已经创建了一个图像显示窗口,否则该函数将无法正常工作。

        同时,倘若你使用cv2.imshow()想要显示image,但是却没有在代码中加入这一行cv2.waitKey(0)命令,那么图片将不会正常显示,显示结果为黑色背景。

cv2.destroyAllWindows()

      cv2.destroywindows()函数是用来关闭所有OpenCV创建过的窗口的,这些窗口实际是都是使用python内置库tkinter编写的,先前的tkinter窗口会阻塞主线程。所以,当我们完成图像处理或显示操作后,经常需要关闭这些窗口以释放资源。倘若不将他们关闭当前图像窗口可能无法显示。

cv2.namedWindow()

        cv2.namesWindow()函数写在cv2.imshow()函数之前,它主要用来设置cv2.imshow()函数弹出的窗口的属性。

比如:我们正常使用cv2.imshow()显示的图像的窗口不可拉伸,我们只需要在cv2.imshow()函数之前,加一行以下代码便可实现窗口可拉伸:

#cv2.namedWindow()函数调整图像显示窗口

'''
cv2.namedWindow()所有flags:
cv2.WINDOW_AUTOSIZE
cv2.WINDOW_FREERATIO
cv2.WINDOW_FULLSCREEN
cv2.WINDOW_GUI_EXPANDED
cv2.WINDOW_GUI_NORMAL
cv2.WINDOW_KEEPRATIO
cv2.WINDOW_NORMAL
cv2.WINDOW_OPENGL'
'''
import cv2#opencv读取的格式是BGR
image=cv2.imread('test.jpg')
image=cv2.resize(image,(500,500))
cv2.namedWindow('image',cv2.WINDOW_GUI_NORMAL)
cv2.imshow('image',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像所在窗口可以x,y方向拉伸 

cv2.namedWindow()函数只有两个参数,winname与flags,winname是待作用的窗口名称,flags用来设置该窗口的属性,以下是cv2.namedWindow()函数所有flags及其含义:

cv2.WINDOW_AUTOSIZE

窗口大小会自动调整为与输入图像的大小相同,用户无法手动调整窗口尺寸 。创建窗口后,图像以原始大小显示在窗口中,窗口大小随图像尺寸变化而自适应

cv2.WINDOW_FREERATIO

窗口中的图像可以自由缩放,不保持图像的原始宽高比。这意味着在调整窗口大小时,图像会按照窗口的变化随意拉伸或压缩,可能会导致图像变形 

cv2.WINDOW_FULLSCREEN

创建一个全屏窗口,窗口将占据整个屏幕,通常需要通过特定的系统操作(如按下特定快捷键)来退出全屏模式 。通过waitkey()函数实现

cv2.WINDOW_GUI_EXPANDED

提供扩展的GUI功能,允许更丰富的用户界面元素和交互方式。这个标志通常用于创建具有更多控件和功能的窗口,不过具体的表现和可用功能可能依赖于OpenCV的版本和底层使用的GUI后端 

cv2.WINDOW_GUI_NORMAL

创建具有标准GUI外观和功能的窗口,这是最常见的窗口创建模式,提供基本的窗口操作(如关闭按钮等),没有额外的扩展功能 

cv2.WINDOW_KEEPRATIO

窗口中的图像在缩放时会保持其原始的宽高比。当调整窗口大小时,图像会根据窗口的变化按比例缩放,以确保图像不会变形 

cv2.WINDOW_NORMAL

允许用户手动调整窗口的大小与 cv2.WINDOW_AUTOSIZE 不同,此模式下窗口大小不会自动适应图像大小,用户可以根据需要改变窗口尺寸,图像也会相应地进行缩放显示 

cv2.WINDOW_OPENGL

创建支持OpenGL的窗口,这使得可以在窗口中使用OpenGL的图形渲染功能,适用于需要高级图形处理和交互的应用场景 

使用plt.imshow()显示图像

import cv2#opencv读取的格式是BGR
import matplotlib.pyplot as plt#matplotlib读取的格式是RGB
image=cv2.imread('test.jpg')
image=cv2.resize(image,(500,500))
#使用plt.imshow(),需要先将BGR转化成RGB,这里使用cv2.cvtColor颜色通道转换函数完成
image=cv2.cvtColor(image,cv2.COLOR_RGB2BGR)
plt.axis('off')
plt.imshow(image)

结果

        这里需要注意的是opencv读取的图像时默认格式是BGR,而matplotlib读取的格式是RGB,如果我们在读取图像时不指定读取方式且不使用cv2.cvtColor()通道转换函数将颜色通道转换成RGB的话,那么显示出来的图像的颜色便会怪怪的。。。

        这是因为,matplotlib把原本是红色的通道误认为是蓝色通道,而原本是蓝色的通道则被认为是红色通道。这种颜色通道的错位就会导致图像颜色显示异常、

        但是,无论如何,cv2.imshow与plt.imshow这两个函数在显示图像时,需要传入的都是图像的ndarray数据。

保存图像cv2.imwrite()

#cv2.imwrite保存图像
import cv2
image=cv2.imread(filename='test.jpg',flags=cv2.IMREAD_UNCHANGED)
#图像经过某些变换或操作后需要保存
cv2.imwrite(filename='newImage.jpg',img=image,params=[int(cv2.IMWRITE_JPEG_QUALITY), 50])
#filename:保存图像文件名称
#img:图像颜色矩阵
#params:参数是一个可选的序列(通常是列表或元组),用于传递图像编码和压缩相关的参数。

        当我们需要保存图像时,直接调用cv2.imwrite()函数即可。 

总结

        本文主要介绍了opencv图像的读取与显示,后序还将分享更多相关图像处理技术,以及如何利用cv2进行图像特征提取和匹配。并且还会将所有内容合并到专栏中,免费订阅。

        通过本专栏的学习,读者将能够利用cv2库解决实际的图像处理问题,为计算机视觉项目打下坚实基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QT】事件系统入门——QEvent 基础与示例

一、事件介绍 事件是 应用程序内部或者外部产生的事情或者动作的统称 在 Qt 中使用一个对象来表示一个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候&…

5-27 临摹大师-IP-Adapter

前言: 前一节我们主要介绍ControlNet中如何对黑白照片进行上色 主要介绍ControlNet中的IP-Adapter。这个也是一种类似的风格借鉴,类似Reference的能力。 当然IP-Adapter有两点或许可以吸引我们,一个是国人腾讯公司制作的。另一个在速度和效…

Spring MVC面试题(一)

1.什么是Spring MVC? 全称为Model View Controller,Spring MVC是Spring的一个模块,基于MVC架构模式的一个框架 2.Spring MVC优点? 1.可用各种视图技术,不仅限于JSP 2.支持各种请求资源映射策略 3. Spring MVC工作原…

Unity开发的抖音小游戏接入抖音开放平台中的流量主(抖音小游戏接入广告)

前言:作者在进行小游戏审核版本的过程中,碰到了下列问题,所以对这个抖音小游戏接入广告研究了下。 还有就是作者的TTSDK版本号是6.2.6,使用的Unity版本是Unity2022.3.29f1,最好和作者的两个版本号保持一致,因为我发现TTSDK旧版的很多函数在新版中就已经无法正常使用了,必…

统一 Elastic 向量数据库与 LLM 功能,实现智能查询

作者:来自 Elastic Sunile Manjee 利用 LLM 功能进行查询解析,并使用 Elasticsearch 搜索模板,将复杂的用户请求转换为结构化的、基于模式的搜索,从而实现高精度查询结果。 想象一下,你在搜索“距离 Belongil Beach 25…

[操作系统] 学校课程关于“静态优先级抢占式调度“作业

今天我们来分享两道题目哈, 学校弄得题目. T1: 静态优先级, 抢占式(1为高优先级) 图解: 以下是静态优先级抢占式调度的解题过程和结果: 解题思路: 优先级规则: 数值越小优先级越高。新进程到达时,若其优先级高于当前运行进程&…

【SpringBoot】MD5加盐算法的详解

目录 一、什么是加盐算法 二、如何实现加盐算法 2.1 加盐算法代码实现 2.2 注册页面中进行密码加盐 2.3 登录页面进行加盐的解密 2.4 注册和登录 一、什么是加盐算法 加盐算法是一种用于增强密码安全性的技术。这种技术通过在密码存储过程中添加一个随机生成的盐值&…

累计完工数量达到了xxxx超过了最大可完工数量xxxx

之前解决过一次,没有记录下来,不记得发生什么事情。又浪费几个小时去分析问题。这次的经历有点痛苦,碰上多表关连数据的勾稽。分析是河南用户的非法操作造成的。没有领料记录入不了库,跨月了。财务要求删单处理。删单之后&#xf…

飞鸟与鱼不同路

看,好美的太阳。 正是因为有人看才会觉得美,若无人问津,美又从何而来。 嘿嘿,今天提出辞去综合教研室主任一职,不想在这个管理上废时间啦~ 把时间用来考试.........用来做自己的事情,花在自己的身上&…

若依RuoYi-Cloud-Plus微服务版(完整版)前后端部署

一.目标 在浏览器上成功登录进入 二.源码下载 后端源码:前往Gitee下载页面(https://gitee.com/dromara/RuoYi-Cloud-Plus)下载解压到工作目录。 前端源码: 前往Gitee下载页面(https://gitee.com/JavaLionLi/plus-ui)下载解压到工作目录。 文档地址&a…

【redis】list类型:基本命令(下)

文章目录 LLENLREMLTRIMLSET阻塞版本命令BLPOP 和 BRPOP区别使用方式 命令小结内部编码 LLEN 获取 list 的长度 语法: LLEN key时间复杂度: O ( 1 ) O(1) O(1)返回值: list 长度 LREM 删除 count 个 key 中的元素 语法: LREM…

【数据挖掘】知识蒸馏(Knowledge Distillation, KD)

1. 概念 知识蒸馏(Knowledge Distillation, KD)是一种模型压缩和知识迁移技术,旨在将大型复杂模型(称为教师模型)中的知识传递给一个较小的模型(称为学生模型),以减少计算成本&…

VSCode 搭建C++编程环境 2025新版图文安装教程(100%搭建成功,VSCode安装+C++环境搭建+运行测试+背景图设置)

名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、VScode下载及安装二、安装 MinGW-w64 工具链三、Windows环境变量配置四、检查 M…

Ubuntu24.04 LTS 版本 Linux 系统在线和离线安装 Docker 和 Docker compose

一、更换软件源并更新系统 在 Ubuntu 24.04 LTS 中,系统引入了全新的软件源配置格式。现在的源配置文件内容更加结构化且清晰,主要包含了软件类型 (Types)、源地址 (URIs)、版本代号 (Suites) 以及组件 (Components) 等信息。 # cat /etc/apt/sources.li…

MTK Android12 最近历史任务 最左侧的清除历史任务改到页面底部

Android最近历史任务页面 -清除所有- 功能按钮放到底部 文章目录 需求需求原因 修改的核心文件实现方案最近历史任务基本UI结构了解代码实现思路实现方案RecentsViewTaskOverlayFactory在overview_actions_containerOverviewActionsView 实际效果 总结 需求 最近历史任务重&am…

TCP协议支持全双工原因TCP发送接收数据是生产者消费者模型

一、TCP支持全双工的原因 TCP协议支持全双工,即使用TCP协议进行通信时,服务端和客户端可以同时进行数据的发送和接收,互不干扰,实现同时双向传输数据。 这是因为使用TCP协议通信时,读写套接字的文件描述符既用来发送…

文件操作2

7. ⽂件读取结束的判定 7.1 被错误使用的 feof 牢记:在文件读取过程中,不能用 feof 函数的返回值直接来判断文件的是否结束。 feof 的作用是:当文件读取结束的时候,判断读取结束的原因是否是:遇到文件尾结束。 1. …

《又是二叉树?递归与回溯的经典应用》

“ 我喜欢晴天,你恰好是最好的太阳” 226.翻转二叉树 力扣题目链接(opens new window) 翻转一棵二叉树。 这道题我们可以通过递归法解决,我们只要递归的把每一个节点的左右孩子反转一下就能解决了。 代码如下: var invertTree function(ro…

Qt/C++音视频开发82-系统音量值获取和设置/音量大小/静音

一、前言 在音视频开发中,音量的控制分两块,一个是控制播放器本身的音量,绝大部分场景都是需要控制这个,这个不会影响系统音量的设置。还有一种场景是需要控制系统的音量,因为播放器本身的音量是在系统音量的基础上控…

从零到精通文本指令:打造个人AI助理的完整指令库(Prompt 指令实操)

文章目录 从零到精通文本指令:打造个人AI助理的完整指令库(Prompt 指令实操)创作指令创作指令**润色指令****扩写指令** 问答指令直接问答材料问答时间逻辑问答 总结、摘要、翻译指令总结信息抽取翻译 从零到精通文本指令:打造个人AI助理的完整指令库(Pr…