【常用图像增强技术,Python-opencv】

文章目录

    • 常用图像增强技术
    • 调整大小
    • 灰度变换
    • 标准化
    • 随机旋转
    • 中心剪切
    • 随机裁剪
    • 高斯模糊
    • 亮度、对比度和饱和度调节
    • 水平翻转
    • 垂直翻转
    • 高斯噪声
    • 随机块
    • 中心区域

常用图像增强技术

图像增强技术是常用于数据增强的方法,可以帮助增加数据集中图像的多样性,提高深度学习模型的性能和泛化能力。
调整大小(Resize):
调整图像的尺寸,通常用于将图像缩放到模型输入的期望尺寸。
灰度变换(Grayscale Transformation):
将彩色图像转换为灰度图像,降低图像的复杂度,常用于处理黑白图像。
标准化(Normalization):
对图像的像素值进行标准化处理,将像素值缩放到一个特定的范围,例如[0, 1]或[-1, 1],有助于加速模型的训练。
随机旋转(Random Rotation):
在一定角度范围内对图像进行随机旋转,增加模型对旋转变换的鲁棒性。
中心裁剪(Center Crop):
将图像从中心位置裁剪到指定的尺寸,常用于处理物体识别任务。
随机裁剪(Random Crop):
在图像的随机位置进行裁剪,增加模型对位置变换的适应性。
高斯模糊(Gaussian Blur):
对图像进行高斯模糊操作,模糊图像,降低图像中的噪声,有助于模型学习更鲁棒的特征。
亮度、对比度调节(Brightness and Contrast Adjustment):
调整图像的亮度和对比度,增加图像的光照变化,提高模型的鲁棒性。
水平翻转(Horizontal Flip):
将图像水平翻转,增加模型对图像翻转的适应性。
垂直翻转(Vertical Flip):
将图像垂直翻转,增加模型对图像垂直翻转的适应性。
高斯噪声(Gaussian Noise):
向图像中添加高斯噪声,增加图像的复杂性,提高模型的鲁棒性。
随机块(Random Patch):
将图像的随机区域替换为随机像素值或者另外一幅图像的随机区域,增加图像的多样性。
中心区域裁剪(Center Area Crop):
与中心裁剪类似,但是不仅仅是将图像的中心裁剪出来,还可以选择图像的其他区域进行裁剪,增加多样性。

这些技术可以单独应用,也可以组合使用,根据具体任务和数据集的特点选择合适的增强方法,以增加数据的多样性,提高模型的性能和泛化能力。

调整大小

在开始图像大小的调整之前我们需要导入数据(图像以眼底图像为例)。

from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sys
import torch
import numpy as np
import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('image/000001.tif'))
torch.manual_seed(0) # 设置 CPU 生成随机数的 种子 ,方便下次复现实验结果
print(np.asarray(orig_img).shape) #(800, 800, 3)#图像大小的调整
resized_imgs = [T.Resize(size=size)(orig_img) for size in [128,256]]
# plt.figure('resize:128*128')
ax1 = plt.subplot(131)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(132)
ax2.set_title('resize:128*128')
ax2.imshow(resized_imgs[0])ax3 = plt.subplot(133)
ax3.set_title('resize:256*256')
ax3.imshow(resized_imgs[1])plt.show()

首先导入了必要的Python库,包括PIL(Python Imaging Library,也叫Pillow,用于图像处理)、Pathlib(用于操作文件路径)、Matplotlib(用于绘制图表)以及NumPy和PyTorch(用于数学计算和深度学习任务的库)。

接着,通过Image.open(Path(‘image/000001.tif’))语句,从指定路径读取了一张tif格式的原始图像,并将其存储在orig_img变量中。

然后,通过torch.manual_seed(0)设置了PyTorch的随机数种子,确保在每次运行代码时生成的随机数相同,以便实验结果能够被复现。

接下来,代码使用了PIL库中的Image类和torchvision.transforms模块中的T.Resize方法,对原始图像进行了尺寸调整。具体地说,它将原始图像分别调整为128x128和256x256两种不同大小的图像,并将处理后的图像分别存储在resized_imgs列表的两个元素中。

最后,使用Matplotlib库,代码创建了一个包含三个子图(subplot)的图表。第一个子图(ax1)显示了原始图像,第二个子图(ax2)显示了调整大小后的128x128图像,第三个子图(ax3)显示了调整大小后的256x256图像。每个子图的标题用中文标注,通过ax1.set_title(‘original’)、ax2.set_title(‘resize:128128’)和ax3.set_title('resize:256256’)语句分别设置。

最后,通过plt.show()语句,将这三个子图显示在屏幕上。
在这里插入图片描述

灰度变换

此操作将RGB图像转化为灰度图像。

from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import torch
import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('img_2.png'))
torch.manual_seed(0) # 设置 CPU 生成随机数的 种子 ,方便下次复现实验结果
print(np.asarray(orig_img).shape) #(800, 800, 3)gray_img = T.Grayscale()(orig_img)# 将灰度图像转换为NumPy数组,并确保数据类型为np.uint8
gray_array = np.array(gray_img, dtype=np.uint8)# 显示灰度图像
plt.imshow(gray_array, cmap='gray')
plt.title('Grayscale Image')
plt.axis('off')  # 隐藏坐标轴
plt.show()

在这里插入图片描述

标准化

标准化可以加快基于神经网络结构的模型的计算速度,加快学习速度。

从每个输入通道中减去通道平均值
将其除以通道标准差。

from PIL import Image
import torch
import torchvision.transforms as T# 打开并转换图像为RGB模式
orig_img = Image.open('img_2.png').convert('RGB')# 使用torchvision.transforms.ToTensor()将PIL图像转换为PyTorch张量
tensor_img = T.ToTensor()(orig_img)# 对图像进行归一化
normalized_img = T.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))(tensor_img)
normalized_img = [T.ToPILImage()(normalized_img)]# 以下是您的绘图和显示代码
import matplotlib.pyplot as pltplt.rcParams["savefig.bbox"] = 'tight'ax1 = plt.subplot(121)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(122)
ax2.set_title('normalize')
ax2.imshow(normalized_img[0])plt.show()

在这里插入图片描述

随机旋转

设计角度旋转图像

from PIL import Image
import torch
import torchvision.transforms as T# 打开并转换图像为RGB模式
orig_img = Image.open('img_2.png').convert('RGB')# 随机旋转角度范围为±30度
random_rotation = T.RandomRotation(degrees=30)# 使用torchvision.transforms.ToTensor()将PIL图像转换为PyTorch张量
tensor_img = T.ToTensor()(orig_img)# 对图像进行随机旋转和归一化
transform = T.Compose([random_rotation,T.ToTensor(),T.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])transformed_img = transform(orig_img)
transformed_img_pil = T.ToPILImage()(transformed_img)# 以下是您的绘图和显示代码
import matplotlib.pyplot as pltplt.rcParams["savefig.bbox"] = 'tight'ax1 = plt.subplot(121)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(122)
ax2.set_title('transformed')
ax2.imshow(transformed_img_pil)plt.show()

在这里插入图片描述

中心剪切

剪切图像的中心区域

from PIL import Image
import torch
import torchvision.transforms as T# 打开并转换图像为RGB模式
orig_img = Image.open('img_2.png').convert('RGB')# 定义中心剪切的目标尺寸
crop_size = (200, 200)# 随机旋转角度范围为±30度
random_rotation = T.RandomRotation(degrees=30)# 中心剪切
center_crop = T.CenterCrop(crop_size)# 使用torchvision.transforms.ToTensor()将PIL图像转换为PyTorch张量
tensor_img = T.ToTensor()(orig_img)# 对图像进行随机旋转、中心剪切和归一化
transform = T.Compose([random_rotation,center_crop,T.ToTensor(),T.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])transformed_img = transform(orig_img)
transformed_img_pil = T.ToPILImage()(transformed_img)# 以下是您的绘图和显示代码
import matplotlib.pyplot as pltplt.rcParams["savefig.bbox"] = 'tight'ax1 = plt.subplot(121)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(122)
ax2.set_title('transformed')
ax2.imshow(transformed_img_pil)plt.show()

在这里插入图片描述

随机裁剪

随机剪切图像的某一部分

from PIL import Image
import torch
import torchvision.transforms as T# 打开并转换图像为RGB模式
orig_img = Image.open('img_2.png').convert('RGB')# 定义随机剪切的目标尺寸
crop_size = (200, 200)# 随机剪切和随机旋转的组合
random_crop = T.RandomResizedCrop(crop_size, scale=(0.8, 1.0))
random_rotation = T.RandomRotation(degrees=30)# 使用torchvision.transforms.ToTensor()将PIL图像转换为PyTorch张量
tensor_img = T.ToTensor()(orig_img)# 对图像进行随机剪切、随机旋转和归一化
transform = T.Compose([random_crop,random_rotation,T.ToTensor(),T.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])transformed_img = transform(orig_img)
transformed_img_pil = T.ToPILImage()(transformed_img)# 以下是您的绘图和显示代码
import matplotlib.pyplot as pltplt.rcParams["savefig.bbox"] = 'tight'ax1 = plt.subplot(121)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(122)
ax2.set_title('transformed')
ax2.imshow(transformed_img_pil)plt.show()

在这里插入图片描述

高斯模糊

使用高斯核对图像进行模糊变换

from PIL import Image
import torch
import torchvision.transforms as T# 打开并转换图像为RGB模式
orig_img = Image.open('img_2.png').convert('RGB')# 定义高斯模糊的卷积核大小
blur_radius = 5# 高斯模糊和随机剪切的组合
gaussian_blur = T.GaussianBlur(blur_radius)
random_crop = T.RandomResizedCrop((200, 200), scale=(0.8, 1.0))# 使用torchvision.transforms.ToTensor()将PIL图像转换为PyTorch张量
tensor_img = T.ToTensor()(orig_img)# 对图像进行高斯模糊、随机剪切和归一化
transform = T.Compose([gaussian_blur,random_crop,T.ToTensor(),T.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])transformed_img = transform(orig_img)
transformed_img_pil = T.ToPILImage()(transformed_img)# 以下是您的绘图和显示代码
import matplotlib.pyplot as pltplt.rcParams["savefig.bbox"] = 'tight'ax1 = plt.subplot(121)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(122)
ax2.set_title('transformed')
ax2.imshow(transformed_img_pil)plt.show()

在这里插入图片描述

亮度、对比度和饱和度调节

from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sys
import torch
import numpy as np
import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('img_2.png'))
# random_crops = [T.RandomCrop(size=size)(orig_img) for size in (832,704, 256)]
colorjitter_img = [T.ColorJitter(brightness=(2,2), contrast=(0.5,0.5), saturation=(0.5,0.5))(orig_img)]plt.figure('resize:128*128')
ax1 = plt.subplot(121)
ax1.set_title('original')
ax1.imshow(orig_img)
ax2 = plt.subplot(122)
ax2.set_title('colorjitter_img')
ax2.imshow(np.array(colorjitter_img[0]))
plt.show()

在这里插入图片描述

水平翻转

from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sys
import torch
import numpy as np
import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('img_2.png'))HorizontalFlip_img = [T.RandomHorizontalFlip(p=1)(orig_img)]plt.figure('resize:128*128')
ax1 = plt.subplot(121)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(122)
ax2.set_title('colorjitter_img')
ax2.imshow(np.array(HorizontalFlip_img[0]))plt.show()

在这里插入图片描述

垂直翻转

from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sys
import torch
import numpy as np
import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('img_2.png'))VerticalFlip_img = [T.RandomVerticalFlip(p=1)(orig_img)]plt.figure('resize:128*128')
ax1 = plt.subplot(121)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(122)
ax2.set_title('VerticalFlip')
ax2.imshow(np.array(VerticalFlip_img[0]))# ax3 = plt.subplot(133)
# ax3.set_title('sigma=7')
# ax3.imshow(np.array(blurred_imgs[1]))plt.show()

在这里插入图片描述

高斯噪声

向图像中加入高斯噪声。通过设置噪声因子,噪声因子越高,图像的噪声越大

from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sys
import torch
import numpy as np
import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('img_2.png'))def add_noise(inputs, noise_factor=0.3):noisy = inputs + torch.randn_like(inputs) * noise_factornoisy = torch.clip(noisy, 0., 1.)return noisynoise_imgs = [add_noise(T.ToTensor()(orig_img), noise_factor) for noise_factor in (0.3, 0.6)]
noise_imgs = [T.ToPILImage()(noise_img) for noise_img in noise_imgs]plt.figure('resize:128*128')
ax1 = plt.subplot(131)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(132)
ax2.set_title('noise_factor=0.3')
ax2.imshow(np.array(noise_imgs[0]))ax3 = plt.subplot(133)
ax3.set_title('noise_factor=0.6')
ax3.imshow(np.array(noise_imgs[1]))plt.show()

在这里插入图片描述

随机块

正方形补丁随机应用在图像中。这些补丁的数量越多,神经网络解决问题的难度就越大

from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sys
import torch
import numpy as np
import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('img_2.png'))def add_random_boxes(img,n_k,size=64):h,w = size,sizeimg = np.asarray(img).copy()img_size = img.shape[1]boxes = []for k in range(n_k):y,x = np.random.randint(0,img_size-w,(2,))img[y:y+h,x:x+w] = 0boxes.append((x,y,h,w))img = Image.fromarray(img.astype('uint8'), 'RGB')return imgblocks_imgs = [add_random_boxes(orig_img,n_k=10)]plt.figure('resize:128*128')
ax1 = plt.subplot(131)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(132)
ax2.set_title('10 black boxes')
ax2.imshow(np.array(blocks_imgs[0]))plt.show()

在这里插入图片描述

中心区域

和随机块类似,只不过在图像的中心加入补丁。

from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sys
import torch
import numpy as np
import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('img_2.png'))def add_central_region(img, size=32):h, w = size, sizeimg = np.asarray(img).copy()img_size = img.shape[1]img[int(img_size / 2 - h):int(img_size / 2 + h), int(img_size / 2 - w):int(img_size / 2 + w)] = 0img = Image.fromarray(img.astype('uint8'), 'RGB')return imgcentral_imgs = [add_central_region(orig_img, size=128)]plt.figure('resize:128*128')
ax1 = plt.subplot(131)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(132)
ax2.set_title('')
ax2.imshow(np.array(central_imgs[0]))
#
# ax3 = plt.subplot(133)
# ax3.set_title('20 black boxes')
# ax3.imshow(np.array(blocks_imgs[1]))plt.show()

在这里插入图片描述

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

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

相关文章

论文阅读:Point-to-Voxel Knowledge Distillation for LiDAR Semantic Segmentation

来源:CVPR 2022 链接:https://arxiv.org/pdf/2206.02099.pdf 0、Abstract 本文解决了将知识从大型教师模型提取到小型学生网络以进行 LiDAR 语义分割的问题。由于点云的固有挑战,即稀疏性、随机性和密度变化,直接采用以前的蒸馏…

Mapping 设计指南

Mapping 设计指南 目录概述需求: 设计思路实现思路分析1、properties2.fields 3.search_analyzer4.2、format1、enabled2、doc_values 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0…

Vue3 + Nodejs 实战 ,文件上传项目--大文件分片上传+断点续传

目录 1.大文件上传的场景 2.前端实现 2.1 对文件进行分片 2.2 生成hash值(唯一标识) 2.3 发送上传文件请求 3.后端实现 3.1 接收分片数据临时存储 3.2 合并分片 4.完成段点续传 4.1修改后端 4.2 修改前端 5.测试 博客主页:専心_前端…

【Python】文件操作

一、文件的编码 思考:计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢? 答案:使用编码技术( 密码本)将内容翻译成0和1存入 编码技术即:翻译的规则,记录了如何将内容翻译成二进制,以及如何将二…

人人开源前后端分离开源项目启动流程(超详细)

renren-security是一个轻量级的,前后端分离的Java快速开发平台,能快速开发项目并交付【接私活利器】采用SpringBoot、Shiro、MyBatis-Plus、Vue3、TypeScript、Element Plus、Vue Router、Pinia、Axios、Vite框架,开发的一套权限系统&#xf…

【计算机网络笔记】OSI参考模型基本概念

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

(H5轮播)vue一个轮播里显示多个内容/一屏展示两个半内容

效果图 : html: <div class"content"><van-swipeclass"my-swipe com-long-swipe-indicator":autoplay"2500"indicator-color"#00C4FF"><van-swipe-itemclass"flex-row-wrap"v-for"(items, index) in M…

【Git】升级MacOS系统,git命令无法使用

终端执行git命令报错 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun安装这个东东&#xff0c;&#xff1f;需要42小时 最终解决&#xff1a; 下载安装 https…

微信小程序开发的OA会议之会议个人中心的页面搭建及模板,自定义组件的学习

目录 一.自定义组件及会议效果编写 效果显示 二.个人中心布局 编写结果 ​编辑 一.自定义组件及会议效果编写 在页面中创建一个以components命名的项目来存放组件 再在components文件夹中创建一个组件&#xff0c;名为 :tabs &#xff0c;创建操作如图所示 刚刚创建好会报…

山海鲸可视化B/S架构应用

一、什么是B/S架构 BS架构&#xff08;Browser-Server架构&#xff09;是一种常见的软件架构模式&#xff0c;其中系统的核心业务逻辑和数据处理都发生在服务器端&#xff08;Server&#xff09;&#xff0c;而客户端&#xff08;Browser&#xff09;主要负责显示和用户交互。…

客户端post请求,服务器收到{}数据解决方法

当我们发起登录请求时&#xff0c;后台接收到的为{}数据 原因&#xff1a;传送过去的对象格式不对 解决方案&#xff1a; 引入qs npm install qs 在data中格式化数据 const res await axios({url:http://127.0.0.1:3000/post,method:post,data:Qs.stringify({username:te…

阿里云服务器x86计算架构ECS规格大全

阿里云企业级服务器基于X86架构的实例规格&#xff0c;每一个vCPU都对应一个处理器核心的超线程&#xff0c;基于ARM架构的实例规格&#xff0c;每一个vCPU都对应一个处理器的物理核心&#xff0c;具有性能稳定且资源独享的特点。阿里云服务器网aliyunfuwuqi.com分享阿里云企业…

【高等数学】导数与微分

文章目录 1、导数的概念1.1、引例1.1.1、变速直线运动瞬时速度1.1.2、曲线的切线 1.2、导数的定义1.3、证明常用导数1.4、导数的几何意义1.5、可导与连续的关系 2、函数的求导法则2.1、函数的和、差、积、商的求导法则2.2、反函数的求导法则2.3、复合函数的求导法则2.4、基本初…

github: kex_exchange_identification: Connection closed by remote host

问题描述 (base) ➜ test git:(dev) git pull kex_exchange_identification: Connection closed by remote host Connection closed by 192.30.255.113 port 22 致命错误&#xff1a;无法读取远程仓库。解决方案 参照下边文档 https://docs.github.com/en/authentication/tr…

基于SSM的工资管理系统

基于SSM的工资管理系统 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 管理员界面 通知公告 考勤管理 工资管理 请假管理 摘要 基于SSM&#xff08;Spring、S…

【每日一题】根据规则将箱子分类

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;分类讨论 其他语言cpython3 写在最后 Tag 【分类讨论】【2023-10-20】 题目来源 2525. 根据规则将箱子分类 题目解读 题目意思明确&#xff0c;根据条件判断箱子的类别。 解题思路 方法一&#xff1a;分类讨论 根据…

【小白专用】安装Apache2.4+ 安装PHP8.2+ php与sql server 2008 r2连接测试教程

PHP安装 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.要下载Thread Safe&#xff0c;否则没有php7apache2_4.dll这个文件 2.如果是64位系统要下载x64的&#xff0c;x86的不行 3.下载Zip 2、PHP解压安装 将Zip进行解压&#xff0c;里…

docker全家桶(基本命令、dockerhub、docker-compose)

概念 应用场景&#xff1a; Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 作用&#xff1a;Docker 使您能够将应用程序与基…

2023年信息院学生科协第二次硬件培训

2023年信息院学生科协第二次硬件培训 前言一、51单片机简介1、什么是单片机2、主流单片机及其编程语言3、单片机的应用4、单片机开发软件 二、GPIO&#xff08;点亮LED&#xff09;1、GPIO简介2、LED简介3、硬件设计4、软件设计 三、GPIO&#xff08;独立按键&#xff09;1、按…

2023.10(u盘刻录iso)主机,vmware,virtualbox安装linux/ubuntu/kali/centos stream9/arch

download 1 kali官网 2 ubuntu官网 3vmware workstation pro(最新版17pro) 4 virtualbox for linux sudo apt install virtualbox-ext-pack 5 win32 disk imger linux dd 刻录iso到u盘 #查看U盘路径 fdisk -l #图形界面 以kali为例会在桌面出现挂载图标 点开之后输入pwd寻…