数字图像处理:实验二
任务一:
将不同像素(32、64和256)的原图像放大为像素大 小为1024*1024的图像(图像自选)

要求:1)输出一幅图,该图包含六幅子图,第一排是原图,第 二排是对应放大的图; 2)每幅图的顶头都加上小标题
(解释过程原理:实际上这里用到的图像操作就是调用函数来增加它的像素点数,实际生活中的压缩和解压图像中也会有这种操作,用法就是调用imresize函数即可。之余之后建立一个新的窗口和简单的内容分布,实际上的操作可以会看第一章的基本操作。)
A = imread('1.jpg'); %将图像A的大小调整为32x32像素,结果存储在变量img32中
img32 = imresize(A,[32,32]);
%将图像A的大小调整为64x64像素,结果存储在变量img64中
img64 = imresize(A,[64,64]);
%将图像A的大小调整为256x256像素,结果存储在变量img256中
img256 = imresize(A,[256,256]); %将32x32的图像img32放大到1024x1024像素,结果存储在变量img32_resized中
img32_resized = imresize(img32, [1024, 1024]);
%将64x64的图像img64放大到1024x1024像素,结果存储在变量img64_resized中
img64_resized = imresize(img64, [1024, 1024]);
%将256x256的图像img256放大到1024x1024像素,结果存储在变量img256_resized中
img256_resized = imresize(img256, [1024, 1024]); %创建一个新的图形窗口用于显示图像
figure; %在图形窗口的2x3网格中的第一个位置显示32x32的原图
subplot(2,3,1);
imshow(img32); % 显示图像
title('32x32 原图'); % 设置图像标题 %在图形窗口的2x3网格中的第二个位置显示64x64的原图
subplot(2,3,2);
imshow(img64); % 显示图像
title('64x64 原图'); % 设置图像标题 %在图形窗口的2x3网格中的第三个位置显示256x256的原图
subplot(2,3,3);
imshow(img256); % 显示图像
title('256x256 原图'); % 设置图像标题 %在图形窗口的2x3网格中的第四个位置显示32x32放大到1024x1024的图像
subplot(2,3,4);
imshow(img32_resized); % 显示图像
title('32x32 放大到1024x1024'); % 设置图像标题 % 在图形窗口的2x3网格中的第五个位置显示64x64放大到1024x1024的图像
subplot(2,3,5);
imshow(img64_resized); % 显示图像
title('64x64 放大到1024x1024'); % 设置图像标题 %在图形窗口的2x3网格中的第六个位置显示256x256放大到1024x1024的图像
subplot(2,3,6);
imshow(img256_resized); % 显示图像
title('256x256 放大到1024x1024'); % 设置图像标题
结果如下:

任务二:去噪声
要求:
1)对所选图添加噪声(可以选择高斯噪声或椒盐噪声),次数为10次、 30 次和50次;
2)对添加噪声后的图像去噪;
3)输出一幅图,该图包含七幅子图,共三排,第一排是 原图,第二排是添加噪声后的图;第三排是对应去噪声后的图像;
4)每幅图的顶头都加上小标踢;
(操作重点:第一、了解所添加的噪声类型和matlab函数的使用方法,第二、了解噪声的特性,第三、学会查找和调用函数)
img1 = imread('1.png');
% 如果是彩色图像,则将其转换为灰度图像
if size(img1, 3) == 3 img = rgb2gray(img1); % 使用rgb2gray函数将彩色图像转换为灰度图像
end % 向灰度图像img中添加椒盐噪声
% 噪声密度为0.01,相当于添加“10次”噪声
noisy_img10 = imnoise(img, 'salt & pepper', 0.01);
% 噪声密度为0.03,相当于添加“30次”噪声
noisy_img30 = imnoise(img, 'salt & pepper', 0.03);
% 噪声密度为0.05,相当于添加“50次”噪声
noisy_img50 = imnoise(img, 'salt & pepper', 0.05); % 使用中值滤波对添加噪声后的图像进行去噪处理
denoised_img10 = medfilt2(noisy_img10); % 对噪声密度为0.01的图像进行去噪
denoised_img30 = medfilt2(noisy_img30); % 对噪声密度为0.03的图像进行去噪
denoised_img50 = medfilt2(noisy_img50); % 对噪声密度为0.05的图像进行去噪 % 创建一个新的图形窗口用于显示图像
figure; % 在图形窗口的3x3网格中的第一个位置显示原图
subplot(3,3,1);
imshow(img1); % 显示原图(如果是彩色图则显示彩色图,如果是灰度图则显示灰度图)
title('原图'); % 设置图像标题 % 在图形窗口的3x3网格中的第四、五、六个位置分别显示添加不同密度椒盐噪声后的图像
subplot(3,3,4);
imshow(noisy_img10); % 显示噪声密度为0.01的图像
title('椒盐噪声密度0.01'); % 设置图像标题
subplot(3,3,5);
imshow(noisy_img30); % 显示噪声密度为0.03的图像
title('椒盐噪声密度0.03'); % 设置图像标题
subplot(3,3,6);
imshow(noisy_img50); % 显示噪声密度为0.05的图像
title('椒盐噪声密度0.05'); % 设置图像标题
% 在图形窗口的3x3网格中的第七、八、九个位置分别显示去噪后的图像
% 注意:原代码中的标题有误,将“高斯噪声”更正为“椒盐噪声”
subplot(3,3,7);
imshow(denoised_img10); % 显示去噪后的噪声密度为0.01的图像
title('去噪后的椒盐噪声密度0.01'); % 设置图像标题
subplot(3,3,8);
imshow(denoised_img30); % 显示去噪后的噪声密度为0.03的图像
title('去噪后的椒盐噪声密度0.03'); % 设置图像标题
subplot(3,3,9);
imshow(denoised_img50); % 显示去噪后的噪声密度为0.05的图像
title('去噪后的椒盐噪声密度0.05'); % 设置图像标题
结果:

任务三:图像的补集以及对两幅图求并集
要求:
1)求原图的补集;
2)以该图像平均灰度值的3倍获得均值图,并将它与原图做并集操作;
3)输出一幅图,该图包含一排的三幅子图,从左到右为: 原图、补集图和并集图。
4)每幅图的顶头都加上小标题。
(操作重点:第一、了解数字图像处理时的并集、补集的含义,主要是记住其实现时存在的图像然后理解就方便很多,第二、注意理解要求(2)中的获得均值图后在与原图求取并集操作,了解其作用,咸鱼哥建议可以先尝试一下不做并集得到的图像,这样会更方便理解这个概念。)
A = imread('1.jpg'); % 将图像A转换为双精度类型(double),并将像素值归一化到 [0, 1] 区间
% 这是因为imread读取的图像通常是uint8类型,像素值在 [0, 255] 区间
A = im2double(A);
img_1 = A;
img_2 = A;
% 计算原图像A灰度值的三倍,并将结果存储在变量N中
N = 3 * A;
% 使用min函数确保N中的值不超过1,对于大于1的值,将其设置为1
N = min(N, 1);
% 调用自定义函数set_comple计算图像A的补集,并将结果存储在变量h中
% 补集是指将图像中的每个像素值用1减去该像素值得到的图像
h = set_comple(A);
% 调用自定义函数set_union计算图像A和它的三倍图像N的并集,并将结果存储在变量j中
% 对于两幅图像来说,并集是指逐元素取两幅图像中较大的那个值
j = set_union(A, N); % 创建一个新的图形窗口用于显示图像
figure;
% 在图形窗口的1x3网格中的第一个位置显示原图A
subplot(1, 3, 1), imshow(A), title('原图');
% 在图形窗口的1x3网格中的第二个位置显示补集图像h
subplot(1, 3, 2), imshow(h), title('补集图');
% 在图形窗口的1x3网格中的第三个位置显示并集图像j
subplot(1, 3, 3), imshow(j), title('并集图'); % 定义计算补集的函数set_comple
% 输入参数f为待计算补集的图像
% 输出参数img_1为计算得到的补集图像
function img_1 = set_comple(f) img_1 = 1 - f; % 计算补集:将每个像素值用1减去
end % 定义计算并集的函数set_union
% 输入参数f1和f2为待计算并集的两幅图像
% 输出参数img_2为计算得到的并集图像
function img_2 = set_union(f1, f2) img_2 = max(f1, f2); % 计算并集:逐元素取两幅图像中较大的值
End
结果:

任务四:多种噪声添加及多种滤波
要求:
1)对原图添加多种不同类型、不同程度的噪声,包括高斯噪声、椒盐噪声、泊松噪声等(至少3种噪声),噪声参数自己拟定, 但须得到有对比性噪声效果的图像(泊松噪声的参数可以只添加1 次);
2)然后使用不同的滤波方法进行降噪,如中值滤波、自适 应中值滤波、小波降噪等(至少3种滤波方法);
3)输出一幅图,该图至少包含原图(1张)、噪声图(至少5张)和滤波图(至少3张),一共至少9张子图;
4)每幅图的顶头都加上小标题。
(操作重点:这里针对不同类型、不同程度的噪声要重点理解,可以直接在matlab的函数库中搜索函数,这样会显示噪声类型和种类,但是要求英语水平足够扎实才推荐去看。)
d = imread('3.jfif');
% 将图像d转换为双精度类型(double),以便进行后续处理
% 因为imread读取的图像通常是uint8类型,像素值在 [0, 255] 区间
% 转换为double后,像素值会被归一化到 [0, 1] 区间
d_double = im2double(d);
% 添加噪声并滤波处理部分
% 向图像d_double添加高斯噪声,方差为(0.005*5)^2,相当于添加5次高斯噪声的累积效果(但实际上是直接设置了一个较大的方差)
I1 = imnoise(d_double, 'gaussian', 0, 0.005*5^2);
% 向I1添加泊松噪声
I1 = imnoise(I1, 'poisson');
% 向I1添加斑点噪声,噪声密度为0.2
I111 = imnoise(I1, 'speckle', 0.2);
% 向图像d_double添加高斯噪声,方差为(0.001*2)^2,相当于添加2次高斯噪声的累积效果(但实际上是直接设置了一个较小的方差)
I2 = imnoise(d_double, 'gaussian', 0, 0.001*2^2);
% 向I2添加泊松噪声
I2 = imnoise(I2, 'poisson');
% 向I2添加斑点噪声,噪声密度为0.1
I222 = imnoise(I2, 'speckle', 0.1);
% 向图像d_double添加一次较高方差的高斯噪声,方差为0.1^2
I3 = imnoise(d_double, 'gaussian', 0, 0.1^2);
% 向I3添加泊松噪声
I3 = imnoise(I3, 'poisson');
% 向I3添加斑点噪声,噪声密度非常低,为0.001
I333 = imnoise(I3, 'speckle', 0.001);
% 向图像d_double添加椒盐噪声,噪声密度为0.03
I4 = imnoise(d_double, 'salt & pepper', 0.03);
% 向I4添加高斯噪声,方差为0.1^2
I44 = imnoise(I4, 'gaussian', 0, 0.1^2);
% 向I44添加泊松噪声
I444 = imnoise(I44, 'poisson');
% 这行代码是多余的,因为I444已经是double类型,但不会影响后续操作
I444_d = I444;
% 向图像d_double添加椒盐噪声,噪声密度为0.02(实际上这是椒盐噪声,但比例较低时椒噪声可能不明显)
I5 = imnoise(d_double, 'salt & pepper', 0.02);
% 这行代码没有做任何处理,可能是为了保持格式一致而保留的
I5 = I5;
% 向I5添加高斯噪声,方差为0.01^2
I55 = imnoise(I5, 'gaussian', 0, 0.01^2);
% 向I55添加泊松噪声
I555 = imnoise(I55, 'poisson');
% 滤波处理部分
% 创建一个5x5大小的高斯滤波器,标准差为1.4
h1 = fspecial('gaussian', [5 5], 1.4);
% 使用高斯滤波器h1对I444_d进行滤波处理
f_I444 = imfilter(I444_d, h1);
% 创建一个3x3大小的均值滤波器
h2 = fspecial('average', [3 3]);
% 使用均值滤波器h2对I333进行滤波处理
f_I333 = imfilter(I333, h2);
% 使用均值滤波器h2对I555进行滤波处理
f_I555 = imfilter(I555, h2);
% 显示图像部分
% 创建一个新的图形窗口
figure;
% 在3x3的网格中的第一个位置显示原图像d
subplot(3,3,1), imshow(d), title('原图像');
% 在3x3的网格中的第二个位置显示噪声图1(经过高斯、泊松、斑点噪声处理后的图像I111)
subplot(3,3,2), imshow(I111), title('噪声图1(高斯+泊松+斑点)');
% 在3x3的网格中的第三个位置显示噪声图2(经过高斯、泊松、斑点噪声处理后的图像I222)
subplot(3,3,3), imshow(I222), title('噪声图2(高斯+泊松+斑点)');
% 在3x3的网格中的第四个位置显示噪声图3(经过高斯、泊松、斑点噪声处理后的图像I333)
subplot(3,3,4), imshow(I333), title('噪声图3(高斯+泊松+斑点)');
% 在3x3的网格中的第五个位置显示噪声图4(经过椒盐、高斯、泊松噪声处理后的图像I444)
subplot(3,3,5), imshow(I444), title('噪声图4(椒盐+高斯+泊松)');
% 在3x3的网格中的第六个位置显示噪声图5(经过椒盐、高斯、泊松噪声处理后的图像I555)
subplot(3,3,6), imshow(I555), title('噪声图5(椒盐+高斯+泊松)');
% 在3x3的网格中的第七个位置显示对噪声图4进行高斯滤波后的图像f_I444
subplot(3,3,7), imshow(f_I444), title('对噪声图4高斯滤波');
% 在3x3的网格中的第八个位置显示对噪声图3进行平均滤波后的图像f_I333
subplot(3,3,8), imshow(f_I333), title('对噪声图3平均滤波');
% 在3x3的网格中的第九个位置显示对噪声图5进行平均滤波后的图像f_I555
subplot(3,3,9), imshow(f_I555), title('对噪声图5平均滤波');
结果:

任务五:旋转和放大(原图自选)
要求:
1)将原图像旋转不同角度(至少2个角度),并对旋转后的图放大处理(放大到1024*1024);
2)输出一幅图,该图至少包含原图(1张)、旋转图(至少2张)和滤波图(至少2张),一共至少5张子图;
3)每幅图的顶头都加上小标题。
(操作重点:这里的操作基本上没有困难,所以咸鱼哥不重点赘述,记住imrotate和 imresize两个函数的作用就可以了)
img = imread('1.png'); % 使用imrotate函数将图像img旋转45度,结果存储在rotated_img_45中
rotated_img_45 = imrotate(img, 45);
% 使用imrotate函数将图像img旋转90度,结果存储在rotated_img_90中
rotated_img_90 = imrotate(img, 90); % 使用imresize函数将旋转45度后的图像rotated_img_45放大到1024x1024像素,结果存储在rotated_img_45_resized中
rotated_img_45_resized = imresize(rotated_img_45, [1024, 1024]);
% 使用imresize函数将旋转90度后的图像rotated_img_90放大到1024x1024像素,结果存储在rotated_img_90_resized中
rotated_img_90_resized = imresize(rotated_img_90, [1024, 1024]); % 创建一个新的图形窗口,用于显示图像
figure; % 使用subplot函数在2x3的网格中的第一个位置创建一个子图,并显示原图img
subplot(2,3,1);
imshow(img);
title('原图'); % 设置子图的标题为“原图” % 使用subplot函数在2x3的网格中的第二个位置创建一个子图,并显示旋转45度后的图像rotated_img_45
subplot(2,3,2);
imshow(rotated_img_45);
title('旋转45度'); % 设置子图的标题为“旋转45度” % 使用subplot函数在2x3的网格中的第三个位置创建一个子图,并显示旋转90度后的图像rotated_img_90
subplot(2,3,3);
imshow(rotated_img_90);
title('旋转90度'); % 设置子图的标题为“旋转90度” % 使用subplot函数在2x3的网格中的第四个位置创建一个子图,并显示旋转45度后放大的图像rotated_img_45_resized
subplot(2,3,4);
imshow(rotated_img_45_resized);
title('旋转45度后放大'); % 设置子图的标题为“旋转45度后放大” % 使用subplot函数在2x3的网格中的第五个位置创建一个子图,并显示旋转90度后放大的图像rotated_img_90_resized
subplot(2,3,5);
imshow(rotated_img_90_resized);
title('旋转90度后放大'); % 设置子图的标题为“旋转90度后放大”
结果:

第二章针对于数字图像处理的内容的练习和实际的操作,咸鱼哥个人觉得本章内容较为简单,也比较适合初学者和爱好者来学习,本章代码基本上我把逻辑和操作都写上了注释,方便大家理解和使用,为了促进数字图像处理技术的学习,我们一起加油!uu们!
相关文章:
数字图像处理:实验二
任务一: 将不同像素(32、64和256)的原图像放大为像素大 小为1024*1024的图像(图像自选) 要求:1)输出一幅图,该图包含六幅子图,第一排是原图,第 二排是对应放大…...
基于海思soc的智能产品开发(高、中、低soc、以及和fpga的搭配)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 市场上关于图像、音频的soc其实非常多,这里面有高、中、低档,开发方式也不相同。之所以会这样,有价格的因素&am…...
SSM旅游信息管理系统
🍅点赞收藏关注 → 添加文档最下方联系方式可咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 …...
FastADMIN实现网站启动时执行程序的方法
FastAdmin基于ThinkPHP框架:ThinkPHP框架中与 Application_Start 类似的功能可以在应用初始化钩子(Hook)中实现。在FastAdmin项目中,一般在应用的 common.php 文件中定义行为(Behavior)来实现类似功能。 定…...
【威联通】FTP服务提示:服务器回应不可路由的地址。被动模式失败。
FTP服务器提示:服务器回应不可路由的地址。被动模式失败。 问题原因网络结构安全管理配置服务器配置网关 问题 FTP服务器提示:服务器回应不可路由的地址…...
nginx常用配置 (含负载均衡、反向代理、限流、Gzip压缩、图片防盗链 等示例)
nginx的配置文件通常在 /etc/nginx/nginx.conf , /etc/nginx/conf.d/*.conf 中, 一般直接 改 conf.d目录下的 default.conf文件, 然后 先检测配置文件是否有错误 nginx -t 再重新加载配置文件 或 重启nginx,命令如下 nginx -s reload 或…...
21.1、网络设备安全概述
目录 网络设备安全概况——交换机、路由器安全威胁 网络设备安全概况——交换机、路由器安全威胁 第一个是MAC地址泛洪,MAC地址表记录着交换机拥有的MAC地址跟端口的对应关系 MAC地址表主要是三个字段,MAC地址对应的端口号,也就表示主机是连…...
通过idea创建的springmvc工程需要的配置
在创建的spring mvc工程中,使用idea开发之前需要配置文件包括porm.xml、web.xml、springmvc.xml 1、porm.xml 工程以来的spring库,主要包括spring-aop、spring-web、spring-webmvc,示例配置如下: <project xmlns"http:/…...
Redis 持久化机制:RDB 和 AOF
Redis 持久化机制:RDB 和 AOF Redis 主要提供了两种持久化方式:**RDB(Redis Database)**和 AOF(Append-Only File)。它们各自的实现原理、优缺点以及适用场景如下。 1. RDB(Redis Database&…...
【博客之星评选】2024年度前端学习总结
故事的开端...始于2024年第一篇前端技术博客 那故事的终末...也该结束于陪伴了我一整年的前端知识了 踏入 2025 年,满心激动与自豪,我成功闯进了《2024 年度 CSDN 博客之星总评选》的 TOP300。作为一名刚接触技术写作不久的萌新,这次能走到这…...
将IDLE里面python环境pyqt5配置的vscode
首先安装pyqt5全套:pip install pyqt5-tools 打开Vscode: 安装第三方扩展:PYQT Integration 成功配置designer.exe的路径【个人安装pyqt5的执行路径】,便可直接打开UI文件,进行编辑。 配置pyuic,如果下图填写方法使用…...
【专题三:穷举vs暴搜vs深搜vs回溯vs剪枝】46. 全排列
1.题目解析 2.讲解算法原理 1.首先画出决策树,越详细越好 2.设计代码 全局变量 List<List<Integer>> retList<Integer> pathboolean[] check dfs函数 仅关心某一节点在干什么 细节问题回溯 干掉path最后一个元素修改check权限 剪枝 check中为…...
使用傅里叶变换进行图像边缘检测
使用傅里叶变换进行图像边缘检测 今天我们介绍通过傅里叶变换求得图像的边缘 什么是傅立叶变换? 简单来说,傅里叶变换是将输入的信号分解成指定样式的构造块。例如,首先通过叠加具有不同频率的两个或更多个正弦函数而生成信号f(x…...
DDD FAQs梳理
术语 领域:一种专门活动的范围、部类。 子域:一个领域细分出的多个子领域。 核心域:具备核心竞争力的子域。 通用域:同时被多个子域使用的通用功能子域,比如认证、权限。 支撑域:一些辅助性或后台功能组成…...
新星杯-ESP32智能硬件开发--SoC基础
本博文内容导读 1、当前嵌入式系统的发展情况,分析SoC作为物联网开发的重要技术,是未来物联网发展重要方向。 2、介绍SoC系统的组成和系统特点,了解SoC打下SoC基础。 3、介绍基于ESP32的SoC系列开发板,ESP32开发的系统功能进行总…...
WDM_OTN_基础知识_波分系统的网络位置
波分系统简介和OTU 在这节课的内容中,我们主要介绍,波分系统在整个通信网络中的位置,波分系统的构成和它的架构,波分设备的构成和信号图,以及OUT的功能和分类及波分系统的应用场景。 波分系统在整个通信网络中&#x…...
计算机网络 (46)简单网络管理协议SNMP
前言 简单网络管理协议(SNMP,Simple Network Management Protocol)是一种用于在计算机网络中管理网络节点的标准协议。 一、概述 SNMP是基于TCP/IP五层协议中的应用层协议,它使网络管理员能够管理网络效能,发现并解决网…...
Excel重新踩坑6:工作实战总结之根据筛选条件求平均成绩
一、前言: 这个博客的实战场景:给了一组学生数据,这些数据中,有全市20个社区,1-9年级的学生各科成绩。要求按照各社区统计1-9年级的所有学生各科平均值。下面首先介绍会用到的一些函数,然后再简单说明实战…...
使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。
在上一篇博客中主要是使用SpringBootApache POI实现了BOM物料清单Excel表格导出,详见以下博客: Spring Boot Apache POI 实现 Exc()el 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并&#…...
20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识
20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识 2025/1/18 15:12 缘起:做飞凌OK3588-C开发板/核心板【Linux R4】的时候,测试/生产要求没有开机LOGO【飞凌/Rockchip】 要求:黑屏或者中性界面。…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
