【秣厉科技】LabVIEW工具包——OpenCV 教程(19):拾遗 - imgproc 基础操作(上)
文章目录
- 前言
- imgproc 基础操作(上)
- 1. 颜色空间
- 2. 直方图
- 3. 二值化
- 4. 腐蚀、膨胀、开闭运算
- 5. 梯度与轮廓
- 6. 简易绘图
- 7. 重映射
- 总结
前言
- 需要下载安装OpenCV工具包的朋友,请前往 此处 ;
- 系统要求:Windows系统,LabVIEW>=2018,兼容32位和64位。
imgproc 基础操作(上)
本文对于之前教程中,未曾集中详细讲解的基础图像处理内容,进行必要的补充。
这些功能基本都来源于 imgproc 模块,大概可以分为以下几个方面。
1. 颜色空间
此内容之前已有教程,详见:【秣厉科技】LabVIEW工具包——OpenCV 教程(4):颜色空间
2. 直方图
直方图是一种统计表示方法,用于展示图像中不同像素强度出现的频率分布。
OpenCV中,用 calcHist 函数计算直方图,简单用法如下:
-
例2-1:灰度图的直方图统计,区间数为5,均匀分割 8U 范围(0~255)
-
作为常用的一维直方图,其输出结果 Hist 是个列向量,每一个数值代表相应灰度区间内的像素数。
-
calcHist 参数含义:
参数 | 含义 |
---|---|
ImageArray | Mat 数组,存储一张或多张输入图像,尺寸必须一致 |
Hist | 一个 Mat 对象,直方图统计结果的输出容器,类型为 32F |
channels | int 数组,指定需要做直方图统计的通道序号。当 ImageArray 包含多张图片时,通道序号依次递增,比如第一张包含3个通道,序号为0、1、2;第二张也包含3个通道,序号为3、4、5,以此类推。 channels 只包含一个通道序号时,代表最常用的一维直方图;当包含多个通道序号时,则是多维直方图。 |
histSize | int 数组,指定每个通道(维度)的直方图数量 |
ranges | float 数组,指定每个通道中像素强度(灰度)值的统计范围。 当 uniform 为真,ranges 每通道只需两个数值,即(总下限,总上限),将自动平均分割成 histSize 指定的份数; 当 uniform 为假,ranges 每通道需手动分割,如(h0,h1,h2,h3)代表三个范围 h0-h1,h1-h2,h2-h3 ; 以上的每个范围都遵循 “包含左端,不包含右端” 的原则,即左闭右开。 |
uniform | 布尔值,均一化标志,其功能如上面 ranges 所述。 |
accumulate | 布尔值,累加标志。 当 accumulate 为假,函数左端传入的 Hist 将被清空后,再写入本次直方图统计结果; 当 accumulate 为真,函数左端传入的 Hist 不会被清空,而是直接累加上本次直方图统计结果。 |
Mask | Mat 类型的掩码,可选参数,不连接代表全图参与统计。 |
- 例2-2:灰度图的直方图统计,自定义非均匀分割区间
- 例2-3:将两张彩色图片的 R通道 直方图累加在一起
- 通道顺序是BGR,所以两张图片R通道的序号分别是2和5;
- 第一次 calcHist 的 accumulate 参数是真、假都可以,因为传入的 Hist 初始为空矩阵;
- 但第二次 calcHist 的 accumulate 参数必须为真,才能实现累加。
- 例2-4:二维直方图范例
- channels 同时给定2个通道序号,histSize 和 ranges 指定两组分割区间,将进行二维直方图统计;
- 假如两组区间数分别为 M 和 N,那么输出的二维直方图尺寸就是 M x N;
- 每个元素 Hist (i,j) 代表 同时满足 “第1个通道强度值落在第1组的第 i 区间,第2个通道强度值落在第2组的第 j 区间” 的像素数;
- 不难看出,将二维直方图 “行向累加” 成一列,就是第1个通道的一维直方图;“列向累加” 成一行,就是第2个通道的一维直方图。
3. 二值化
二值化的任务,是将一张灰度图,按照设定的阈值,转化成仅有黑白两种颜色的单通道图像。
OpenCV中,用 threshold 函数实现灰度图的二值化,简单用法如下:
- 例3-1:灰度图二值化,阈值127,最大值255,反向模式(大于阈值时置0,小于等于阈值时置最大值)
- threshold 参数含义:
参数 | 含义 |
---|---|
srcImage | 源图像 |
dstImage | 目标图像,即二值化的结果 |
thresh | 阈值 |
maxval | 最大值,即二值中的较大值(最小值固定为0) |
type | 转化类型,共 8 种,含义见下表 |
retValue(返回值) | 当 type 设为 OTSU 或 TRIANGLE 时,返回自适应的阈值;否则原样返回 thresh 参数值。 |
– | – |
type类型 | 含义 |
THRESH_BINARY | 阈值二值化模式,大于阈值时置 maxval ,小于等于阈值时置 0 |
THRESH_BINARY_INV | 反向阈值二值化模式,大于阈值时置 0 ,小于等于阈值时置 maxval |
THRESH_TRUNC | 截断模式,大于阈值时置 thresh ,小于等于阈值时维持原值 |
THRESH_TOZERO | 取零模式,大于阈值时维持原值,小于等于阈值时置 0 |
THRESH_TOZERO_INV | 反向取零模式,大于阈值时置 0 ,小于等于阈值时维持原值 |
THRESH_MASK | 返回掩码(本类型已不支持,冗余残留) |
THRESH_OTSU | OTSU 自适应 阈值, 基于区分前景和背景。通常与其他模式叠加使用 |
THRESH_TRIANGLE | TRIANGLE 自适应 阈值, 基于寻找直方图双峰之间的谷底。 通常与其他模式叠加使用 |
- 例3-2:灰度图二值化,采用OTSU自动确定阈值,再按 THRESH_BINARY_INV 模式转化
4. 腐蚀、膨胀、开闭运算
腐蚀、膨胀、开闭运算都属于形态学操作,这些通常在二值化图像上进行。通过特殊的滤波规则,实现二值图中白色区域的收缩、扩张、去噪、联通、边缘润滑等效果。先腐蚀后膨胀,称为开运算;先膨胀后腐蚀,称为闭运算。
相关函数如下表:
函数 | 功能 |
---|---|
erode | 腐蚀,白色区域收缩,孤立的小型白色区域(噪声点)甚至完全消失 |
dilate | 膨胀, 白色区域扩张,孤立的小型黑色区域(噪声点)甚至完全消失 |
morphology | 可实现多种形态学运算,包括腐蚀、膨胀、开运算 和 闭运算(取决于 op 参数) |
getStructuringElement | 生成结构元素(一个小型二维Mat),作为上述运算的滤波 “核” |
- 例4-1:对同一个二值图,用 9x9 的矩形核,分别进行腐蚀、膨胀、开运算
- 参考范例:examples/Molitec/OpenCV/imgproc/imgproc_3(binary).vi
- 简单说明参数:
anchor 是锚点,即 “核” 在图像上移动时的参考点,默认(-1,-1)代表中心点;
iterations 是迭代次数;
borderType 边界像素外推的方法,默认为 BORDER_CONSTANT ,即常量填充;
borderValue 边界填充值,默认为 64F 的最大值 1.797693134862E+308 ;
op 是 morphology 函数独有的参数,定义操作类型。开运算 MORPH_OPEN ,闭运算 MORPH_CLOSE;
5. 梯度与轮廓
图像梯度指的是像素强度(灰度)的变化率,可以用来确定图像的边缘轮廓。
OpenCV中,常用的边缘检测函数包括:Canny、Scharr、Sobel 和 Laplacian。
其中 Canny 是个多态VI,包含 image 输入 和 dxdy 输入 两种模式。
- 例5-1:对同一个灰度图,分别用 Canny、Scharr、Sobel 和 Laplacian 进行梯度计算和边缘检测
- 参考范例:examples/Molitec/OpenCV/imgproc/imgproc_4(gradient).vi
- 各函数的 params 参数说明
Canny参数 | 含义 |
---|---|
threshold1 | 低阈值,像素梯度低于这个阈值的,一定不是边缘。 |
threshold2 | 高阈值,像素梯度高于这个阈值的,一定是边缘,且为 “强边缘”。 如果介于两个阈值之间,只有与强边缘相邻时,才被视为边缘的一部分。 |
apertureSize | Sobel 算子尺寸,必须取1、3、5 或 7。 默认为3,代表使用 3x3 的卷积核计算梯度。 |
L2gradient | 布尔值,为真代表使用L2范数(欧几里得距离),为假代表使用L1范数(曼哈顿距离) |
– | – |
Scharr参数 | |
ddepth | 目标图像深度(数据类型,如 CV_8U 等),默认为-1,代表与源图像深度相同。 |
dx | x方向的求导阶数。0表示不计算x方向导数。 |
dy | y方向的求导阶数。0表示不计算y方向导数。 |
scale | 计算导数时的缩放因子,默认为1。 |
delta | 增量值,加到计算出的导数上,默认值为0。 |
borderType | 边界类型,默认为 BORDER_DEFAULT,等同于 BORDER_REFLECT_101 |
– | – |
Sobel参数 | |
ddepth | 同上 |
dx | 同上 |
dy | 同上 |
ksize | Sobel 算子尺寸,必须取1、3、5 或 7。 |
scale | 同上 |
delta | 同上 |
borderType | 同上 |
– | – |
Laplacian参数 | |
ddepth | 同上 |
ksize | Laplacian 算子尺寸,必须是奇数。 |
scale | 同上 |
delta | 同上 |
borderType | 同上 |
- 例5-2:采用 spatialGradient 分别计算dx、dy,再用 Canny 的dxdy模式进行边缘检测
- 这相当于把 例5-1 的 Canny 计算过程一分为二。
在经过 Canny、Scharr、Sobel 和 Laplacian 计算之后,我们往往需要把其中的边缘轮廓提取出来,也就是把输出的二值图中 “连续的白色像素” 的坐标连接在一起,形成轮廓线条。
在OpenCV中,可以使用 findContours 提取梯度二值图中的轮廓线条。
- 例5-3:使用 Canny + findContours 计算梯度并提取轮廓,最后用 drawContours 绘制轮廓
- findContours 参数
- mode 定义轮廓检索模式,默认 RETR_EXTERNAL 代表只检索最外层的轮廓;
- method 定义轮廓近似方法,默认 CHAIN_APPROX_SIMPLE 代表简单近似法;
- offset 是坐标偏移量,默认(0,0);
- 输出 contours 是轮廓结果,其中 pts 数组是全部点坐标序列,npts 代表每个轮廓包含的点数,ncontours 代表轮廓个数。这与之前教程(5)中 drawContours 的输入参数定义相同;
- 输出 hierarchy 代表轮廓的层次结构,是1个(轮廓个数 x 4)的二维数组。每行4个整数,依次代表本行索引号轮廓的 “上一个、下一个、第一个、最后一个” 轮廓的索引号。-1 表示没有。
从上图 hierarchy 输出可以分析:
第0行(1,-1,-1,-1)代表0号轮廓的上一个是1号轮廓,下一个是 -1(没有);
第1行(2,0,-1,-1)代表1号轮廓的上一个是2号轮廓,下一个是0号轮廓;
第2行(3,1,-1,-1)代表2号轮廓的上一个是3号轮廓,下一个是1号轮廓;
…
最终得出,这6个轮廓的先后顺序为:5,4,3,2,1,0
6. 简易绘图
此内容之前已有教程,详见:【秣厉科技】LabVIEW工具包——OpenCV 教程(5):简易绘图
7. 重映射
图像重映射,指的是按照一定规则,重新排布源图像中的像素坐标位置,并渲染到目标图像中。
之前教程提到的 resize 就是一种重映射,用于实现图片的缩放。
- 例7-1:使用 resize 将源图像尺寸缩小到原来的一半
- resize 参数
- dsize:目标图像尺寸。如果 dsize 不为0,输出图像尺寸以 dsize 为准;否则,将由下面的 fx、fy 计算决定;
- fx:水平方向缩放因子;
- fy:垂直方向缩放因子;
- interpolation:插值方法,指的是当放大图像时,填补空缺的方法。默认 INTER_LINEAR 双线性插值法。
下面,再介绍两种可以扭曲源图像形状的重映射:仿射变换(warpAffine)和 透视变换(warpPerspective)。
- 例7-2:分别使用 warpAffine 和 warpPerspective,将图片中一块 “四边形” 区域重映射成 “矩形”
- 参考范例:examples/Molitec/OpenCV/imgproc/imgproc_7(wrap).vi
- 首先,锚定源图像四边形的4个顶点,再给定输出矩形的4个顶点,将这两组顶点分别输入到 getAffineTransform 和 getPerspectiveTransform 中,运行得到各自的变换矩阵 M;
- 接着,使用 warpAffine 配合 getAffineTransform 输出的 M,完成仿射变换;
- 使用 warpPerspective 配合 getPerspectiveTransform 输出的 M,完成透视变换;
如果你想完全自定义一种映射关系,即手动给定每一个像素在新图像中的坐标位置,那么可以使用 remap 函数。
- 例7-3:使用 remap 实现图片的水平翻转
- remap 函数 VI 的上方需要输入两个 Mat 参数,名称分别为 map1 和 map2,用于逐像素指定映射后的新坐标;
- 上述 map1 和 map2 有两种组织方式:
其一,map1 和 map2 都是单通道矩阵,那么 map1 指定所有像素映射之后的X坐标,map2 指定Y坐标;
其二,map1 是双通道矩阵,那么由 map1 独自指定(X,Y)坐标,而 map2 为空矩阵 即可。 - 参考范例:examples/Molitec/OpenCV/imgproc/imgproc_6(remap).vi
顺便一提,如果只是需要进行图片翻转、旋转这样常规的操作,那完全没必要用到 remap。使用 core 模块下的 flip 和 rotate 等函数,就完全可以做到,而且更为简洁。
core 模块下也有不少重映射的方法,感兴趣的读者可以试一试。
总结
- 本系列博文作为LabVIEW工具包—OpenCV的教程,将以专栏的形式陆续发布和更新。
- 对工具包感兴趣的朋友,欢迎下载试用:秣厉科技 - LabVIEW工具包 - OpenCV
- 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。
相关文章:
【秣厉科技】LabVIEW工具包——OpenCV 教程(19):拾遗 - imgproc 基础操作(上)
文章目录 前言imgproc 基础操作(上)1. 颜色空间2. 直方图3. 二值化4. 腐蚀、膨胀、开闭运算5. 梯度与轮廓6. 简易绘图7. 重映射 总结 前言 需要下载安装OpenCV工具包的朋友,请前往 此处 ;系统要求:Windows系统&#x…...
python中,sort(reverse=True)与列表.reverse的区别
python中,sort(reverseTrue)与列表.reverse的区别 在 Python 中,sort(reverseTrue) 和 列表.reverse() 是两种不同的操作,主要区别如下: 1. sort(reverseTrue) 作用: 对列表进行降序排序(即从大到小排列…...
Java【多线程】(8)CAS与JUC组件
目录 1.前言 2.正文 2.1CAS概念 2.2CAS两种用途 2.2.1实现原子类 2.2.2实现自旋锁 2.3缺陷:ABA问题 2.4JUC组件 2.4.1Callable接口 2.4.2ReentrantLock(与synchronized对比) 2.4.3Semaphore信号量 2.4.4CountDownLatch 3.小结 1…...
MATLAB仿真多相滤波抽取与插值的频谱变化(可视化混叠和镜像)
MATLAB画图仿真多相滤波抽取与插值的频谱变化 可视化多速率信号处理抽取与插值的频谱变化 实信号/复信号 可视化混叠和镜像 目录 前言 一、抽取的基本原理 二、MATLAB仿真抽取运算 三、内插的基本原理 四、MATLAB仿真内插运算 总结 前言 在多速率系统中增加信号采样率的运…...
Docker 与 Podman常用知识汇总
一、常用命令的对比汇总 1、基础说明 Docker:传统的容器引擎,使用 dockerd 守护进程。 Podman:无守护进程、无root容器引擎,兼容 Docker CLI。 Podman 命令几乎完全兼容 Docker 命令,只需将 docker 替换为 podman。…...
Spark-SQL简介
Spark-SQL: Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。 Hive and SparkSQL: Drill,Impala.Shark Shark 是伯克利实验室 Spark 生态环境的组件之一. Shark 的出现,使得 SQL-on-Hadoop 的性能比 Hive 有了 10-100 倍的提高。 Spark-S…...
第十八讲 | 支持向量机(SVM):在地类识别与遥感影像分类中的应用
在遥感影像分类与地类识别中,我们经常面临高维特征、多样地表类型以及样本噪声等挑战。**支持向量机(Support Vector Machine,SVM)**作为一种强大的监督分类方法,因其在小样本、高维特征下依然保持良好泛化能力,被广泛用于遥感影像分析、地类判别及环境监测等领域。 📌…...
5.6 GitHub PR分析爆款方案:分层提示工程+LangChain实战,准确率飙升22%
GitHub Sentinel 分析报告核心模块:Pull Request 提示工程设计与实现 关键词:Pull Request 分析、大模型提示工程、分层结构设计、动态参数注入、LangChain 集成 1. PR 分析需求与技术挑战 在 GitHub 开源项目管理中,Pull Request 分析需满足三个核心需求: #mermaid-svg-…...
centos yum install environment-modules
在 CentOS 系统中,environment-modules 是一个非常有用的包,它允许用户管理和动态地加载环境变量,这对于使用特定模块(例如软件库或编译器工具链的路径)非常方便。如果你想通过 yum 安装 environment-modulesÿ…...
Spring Boot + ShardingSphere 分库分表实战:电商订单场景案例
摘要:本文通过电商系统中订单表分库分表的实际案例,结合Spring Boot和ShardingSphere框架,详细讲解如何实现水平分库分表,解决海量数据存储与查询性能问题。 一、场景分析 在电商系统中,订单表随着业务增长可能面临以…...
C++ 指针从入门到精通实战:全面掌握指针的概念与应用
C 指针从入门到精通实战:全面掌握指针的概念与应用 指针(Pointer)是C中一个极其重要且强大的概念,它赋予了程序员直接操作内存的能力,从而实现高效的代码和复杂的数据结构。然而,指针的使用也伴随着诸多挑…...
C++ 智能指针底层逻辑揭秘:优化内存管理的核心技术解读
目录 0.为什么需要智能指针? 1.智能指针的使用及原理 RAII: 智能指针的原理: 2.智能指针有哪些? std::auto_ptr std::unique_ptr std::shared_ptr std::weak_ptr 0.为什么需要智能指针? 想要回答这个问题&…...
Android基础入门、Android常见界面布局基础练习
第1章 Android基础入门、第2章Android常见界面布局 一. 填空题 1. (填空题)如果希望在XML布局文件中调用颜色资源,可以使用_____调用。 正确答案: (1) color 2. (填空题)Android程序入口的Activity是在_____文件中注册的。 正确答案: (1…...
Spring Cloud主要组件介绍
一、Spring Cloud 1、Spring Cloud技术概览 分为:服务治理,链路追踪,消息组件,配置中心,安全控制,分布式任务管理、调度,Cluster工具,Spring Cloud CLI,测试 2、注册中心:常用注册中心(Euerka[AP]、Zookeeper[CP]) 1)Euerka Client(服务提供者)=》注册=》Eue…...
【7】深入学习Buffer缓冲区-Nodejs开发入门
深入学习Buffer缓冲区 前言ASCII码GBK/GB2312UnicodeJavascript转换 BufferBuffer的作用Buffer的创建Buffer.allocBuffer.allocUnsafe(size)Buffer.allocUnsafeSlow(size)Buffer.from(array)Buffer.from(arrayBuffer[, byteOffset[, length]])Buffer.from(buffer)Buffer.from(s…...
酶动力学参数预测,瓶颈识别……中科院深圳先进技术研究院罗小舟分享AI在酶领域的创新应用
蛋白质,作为生命的基石,在生命活动中发挥着关键作用,其结构和功能的研究,对创新药物研发、合成生物学、酶制剂生产等领域,有着极其重要的意义。但传统蛋白质设计面临诸多难题,蛋白质结构复杂,序…...
Dockerfile
Dockerfile Dockerfile 是一个文本文件,其内包含了一条条指令,每一条指令构建镜像的一层,因此每一条指令的内容,就是描述该层应当如何构建。 定制镜像,可以将镜像制作的每一层的修改、安装、构建、操作的命令…...
Redis高频面试题(含答案)
当然可以,Redis 是面试中非常常见的高频考点,尤其在后台开发、分布式系统、缓存设计等方向,面试官常常通过 Redis 来考察你的高并发处理能力、系统设计能力和对缓存一致性理解。 以下是一些典型 Redis 的面试场景题目类型和你可以如何回答的…...
#3 物联网 的标准
商业化的技术都有标准, 标准的本质就是 可以重复多次实现的方法。而这些方法都是设定物联网的那些人布局的,当然在保证按方法操作的结果是属于物联网这个基本的操作里面,藏着的是对某些利益团队的维护,这里大家知道就可以了。 除 …...
Moviepy 视频编辑的Python库,可调整视频分辨率、格式
MoviePy简介 MoviePy 是一个用于视频编辑的Python库,支持视频剪辑、和合成、转码等多种操作,主要有点: 基于 FFmpeg:能够处理几乎所有常见的视频格式。 修改视频分辨率 方法一:指定新的宽度和高度 from moviepy.editor import V…...
【LeetCode 热题 100】哈希 系列
📁1. 两数之和 本题就是将通过两层遍历优化而成的,为什么需要两层遍历,因为遍历 i 位置时,不知道i-1之前的元素是多少,如果我们知道了,就可以通过两数相加和target比较即可。 因为本题要求返回下标…...
蓝光三维扫描:汽车冲压模具与钣金件全尺寸检测的精准解决方案
随着汽车市场竞争日趋激烈,新车型开发周期缩短,安全性能要求提高,车身结构愈加复杂。白车身由多达上百个具有复杂空间型面的钣金件,通过一系列工装装配、焊接而成。 钣金件尺寸精度是白车身装配精度的基础。采用新拓三维XTOM蓝光…...
鲲鹏+昇腾部署集群管理软件GPUStack,两台服务器搭建双节点集群【实战详细踩坑篇】
前期说明 配置:2台鲲鹏32C2 2Atlas300I duo,之前看网上文档,目前GPUstack只支持910B芯片,想尝试一下能不能310P也部署试试,毕竟华为的集群软件要收费。 系统:openEuler22.03-LTS 驱动:24.1.rc…...
面试篇 - GPT-1(Generative Pre-Training 1)
GPT-1(Generative Pre-Training 1) ⭐模型结构 Transformer only-decoder:GPT-1模型使用了一个12层的Transformer解码器。具体细节与标准的Transformer相同,但位置编码是可训练的。 注意力机制: 原始Transformer的解…...
探索机器人创新技术基座,傅利叶开源人形机器人 Fourier N1
一.傅利叶为什么要开源? 2025年3月17日,傅利叶正式开源全尺寸人形机器人数据集Fourier ActionNet。 2025年4月11日,傅利叶正式发布首款开源人形机器人 Fourier N1。 傅利叶为什么要做这些开源工作呢?4月11日&#x…...
正则表达式和excel文件保存(python)
正则表达式 import re data """ <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" /> <title>测试页面</title> </head> <body> <h1>《人工智能的发展趋势分析报…...
无人船 | 图解基于视线引导(LOS)的无人艇制导算法
目录 1 视线引导法介绍2 LOS制导原理推导3 Lyapunov稳定性分析4 LOS制导效果 1 视线引导法介绍 视线引导法(Line of Sight, LOS)作为无人水面艇(USV)自主导航领域的核心技术,通过几何制导与动态控制深度融合的机制&am…...
大腾智能获邀出席华为云2025生态大会,携全栈工业软件助力产业智能升级
4月10日-4月11日,以“聚力共创,加速行业智能跃迁”为主题的华为云生态大会2025在安徽芜湖召开。大腾智能受邀出席此次盛会,与众多行业精英、生态伙伴齐聚一堂,深度参与前沿技术演示、生态伙伴签约及商业场景共创,与行业…...
Java基础关键_037_Java 常见新特性
目 录 一、新语法 1.JShell 2.try-with-resources (1)jdk 7 之前 (2)jdk 7 之后 (3)jdk 9 之后 3.局部变量类型判断(不推荐) 4.instanceof 的模式匹配 (1&a…...
鸿蒙公共通用组件封装实战指南:从基础到进阶
一、鸿蒙组件封装核心原则 1.1 高内聚低耦合设计 在鸿蒙应用开发中,高内聚低耦合是组件封装的关键准则,它能极大提升代码的可维护性与复用性。 从原子化拆分的角度来看,我们要把复杂的 UI 界面拆分为基础组件和复合组件。像按钮、输入框这…...
IntelliJ 配置(二)配置相关类库(2)LineMarkerProvider
一、介绍 LineMarkerProvider 是 IntelliJ 平台插件开发中的一个接口,它的作用是在编辑器左侧的“行标记区域”(就是代码行号左边那一栏)添加各种图标、标记或导航链接。比如Java 类中看到的: 小绿色三角形(可以点击运…...
红宝书第四十二讲:Angular核心特性精讲:依赖注入 RxJS整合
红宝书第四十二讲:Angular核心特性精讲:依赖注入 & RxJS整合 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、依赖注入(Dependency Injection):快…...
AD917X系列JESD204B MODE7使用
MODE7特殊在F8,M4使用2个复数通道 CH0_NCO10MHz CH1_NCO30MHZ DP_NCO50MHz DDS1偏移20MHz DDS2偏移40MHz...
软考高级系统架构设计师-第11章 系统架构设计
【本章学习建议】 根据考试大纲,本章不仅考查系统架构设计师单选题,预计考12分左右,而且案例分析和论文写作也是必考,对应第二版教材第7章,属于重点学习的章节。 软考高级系统架构设计师VIP课程https://edu.csdn.net/…...
中和农信的“三农”服务密码:科技+标准化助力乡村振兴
作为中国农村市场最大的专注服务农村小微客户的“三农”综合服务机构,中和农信凭借多年积累的农村服务经验,成功从单一小额信贷机构转型为覆盖金融、生产、生活及生态服务的综合型“三农”服务平台。近期,中和农信在由中保保险资产登记交易系…...
【Redis】布隆过滤器应对缓存穿透的go调用实现
布隆过滤器 https://pkg.go.dev/github.com/bits-and-blooms/bloom/v3 作用: 判断一个元素是不是在集合中 工作原理: 一个位数组(bit array),初始全为0。多个哈希函数,运算输入,从而映射到位数…...
MyBatis-Plus笔记(下)
注解 tablename注解 - 描述:表名注解,标识实体类对应的表 - 使用位置:实体类 代码举例: TableName//可以不加,使用实体类的名字作为表名!忽略大小写 //BaseMapper->User实体类-》实体类名-》表名数据…...
【项目管理】第14章 项目沟通管理-- 知识点整理
项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 第6章 项目管理概论 4分第13章 项目资源管理 3-4分第7章 项目…...
3个关键数据解密:首航上市如何重构ebay电商新能源供应链?
3个关键数据解密:首航上市如何重构eBay电商新能源供应链? 在跨境电商圈,一个新玩家的崛起往往意味着新的格局变动。2024年,伴随一家名为“首航”的新能源企业在港股成功上市,整个eBay类目的供应链悄然掀起新一轮洗牌。…...
《华为云Node.js部署:从开发环境到生产上线的完整指南》
目录 引言第一步: 重置密码第二步:连接到服务器第三步:安装必要软件第四步:创建项目目录第五步:将代码上传到服务器1、安装 FileZilla2、打开FileZilla,连接到您的服务器:3、连接后,…...
【网络原理】TCP/IP协议五层模型
目录 一. 协议的分层 二. OSI七层网络协议 三. TCP/IP五层网络协议 四. 网络设备所在分层 五. 封装 六. 分用 七. 传输中的封装和分用 八. 数据单位术语 一. 协议的分层 常见的分层为两种OSI七层模型和TCP/IP五层模型 为什么要协议分层? 在网络通信中&…...
Asp.Net Core学习随笔
学习自BLBL杨中科老师 依赖注入(Dependency Injection) 依赖注入是实现控制反转(Inversion Of Control 即IOC)的一种方式(还有一种叫服务定位器的实现,但是不如依赖注入好用),软件开发中实现解耦常用的方式. 比如吃饭 1. 传统写法(没有DI,紧耦合&a…...
基于PHP的酒店网上订房系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 酒店服务是旅游行业的一个重要组成部分,它的作用已经从过去的单一的住宿、结算帐务向全面、高水平的服务型酒店转变。酒店的服务工作贯穿于整个酒店的市场营销、预定、入住、退房、结账等环节,酒店要提高整体工作水平,简化工作程序&…...
《MySQL从入门到精通》
文章目录 《MySQL从入门到精通》1. 基础-SQL通用语法及分类2. 基础-SQL-DDL-数据库操作3. 基础-SQL-DDL-表操作-创建&查询4. 基础-SQL-DDL-数据类型及案例4.1 数值类型4.2 字符串类型4.3 时间和日期类型 5. 基础-SQL-DDL-表操作-修改&删除5.1 DDL-表操作-修改5.2 DDL-表…...
MySQL聚合查询
聚合查询 group by...
生信初学者教程(三十四):文章的方法
文章目录 介绍数据收集和整理数据整合差异基因分析功能富集分析免疫浸润分析候选标记物识别诊断ROC曲线单细胞分析统计方法介绍 在数据分析进行的同时,我们可以逐步撰写方法部分,确保其与结果紧密相连。一旦结果部分完成,方法部分应根据结果的逻辑顺序进行分类和组织。在描…...
算力云平台部署—SadTalker的AI数字人视频
选择算力 部署选择 选择镜像 机器管理 控制台 通过平台工具进入服务器 认识管理系统 打开命令行 进入目录 stable-diffusion-webui# cd 增加执行权限 chmod x ./webui.sh 运行命令 bash ./webui.sh sudo apt install -y python3 python3-venv git 安装软件 Creating the …...
iPhone相册导出到电脑的完整指南
iPhone相册导出到电脑的完整指南 本文介绍通过数据线连接实现iPhone照片视频传输到电脑的标准操作方法,适用于需要备份移动设备影像资料的用户。 环境准备 使用原装Lightning或USB-C数据线连接设备与电脑需在电脑端安装设备管理工具(如克魔助手&#…...
【数据结构】励志大厂版·初阶(复习+刷题):复杂度
前引:从此篇文章开始,小编带给大家的是数据结构初阶的刷题讲解 ,此类文章将简略的包含相关知识,详细的思路拆分讲解,分析每一题的难点、易错点,看见题目如何分析,以上就是小编预备的内容&#x…...
Nginx底层架构(非常清晰)
目录 前言: 场景带入: HTTP服务器是什么? 反向代理是什么? 模块化网关能力: 1.配置能力: 2.单线程: 3.多worker进程 4.共享内存: 5.proxy cache 6.master进程 最后&…...