transforms数据预处理【图像增强】 ->(个人学习记录笔记)

文章目录

    • 1. 安装
    • 2. transforms——Crop 裁剪
      • 2.1 `transforms.CenterCrop`
      • 2.2 `transforms.RandomCrop`
      • 2.3 `transforms.RandomResizedCrop`
      • 2.4 `transforms.FiveCrop`
      • 2.5 `transforms.TenCrop`
    • 3. transforms——Flip 翻转
      • 3.1 `transforms.RandomHorizontalFlip`
      • 3.2 `transforms.RandomVerticalFlip`
      • 3.3 `transforms.RandomRotation`
    • 4. 图像变换
      • 4.1 `transforms.Pad`
      • 4.2 `transforms.ColorJitter`
      • 4.3 `transforms.Grayscale`
      • 4.4 `transforms.RandomGrayscale`
      • 4.5 `transforms.RandomAffine`
      • 4.6 `transforms.RandomErasing`
      • 4.7 `transforms.Lambda`
      • 4.8 `transforms.Resize`
      • 4.9 `transforms.Totensor`
      • 4.10 `transforms.Normalize`
    • 5. transforms的操作
      • 5.1 `transforms.RandomChoice`
      • 5.2 `transforms.RandomApply`
      • 5.3 `transforms.RandomOrder`
    • 6. 自定义transforms
    • 汇总
      • transforms方法

数据增强又称为数据增广、数据扩增,它是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能力。

注意: 下面图片大小通过markdown代码,图片比例有所更改(=400x)

1. 安装

# 在进行下面代码学习前需要安装torchvision==0.8.2
!pip install torchvision==0.8.2 --user  #在jupyter notebook中pip前面要加上感叹号
# 常规情况
pip install torchvision==0.8.2
from PIL import Image
from torchvision import transforms as T
import torch as tto_tensor = T.ToTensor()
to_pil = T.ToPILImage()
dog = Image.open('./dog.jpeg')  # 从网上下载图片到本地后,再上传至DSW

2. transforms——Crop 裁剪

2.1 transforms.CenterCrop

torchvision.transforms.CenterCrop(size)
  • 功能:从图像中心裁剪图片
  • size:所需裁剪图片尺寸

2.2 transforms.RandomCrop

torchvision.transforms.RandomCrop(size, padding=None, pad_tf_needed=False, fill=0, padding_mode='constant')
  • 功能:从图片中随机裁剪出尺寸为size的图片
  • size: 所需裁剪图片尺寸
  • padding: 设置填充大小
    当为a时,上下左右均填充a个像素;
    当为(a, b)时,上下填充b个像素,左右填充a个像素;
    当为(a, b, c, d)时,左、上、右、下分别填充a、b、c、d。
  • pad_if_need: 若图像小于设定size,则填充
  • padding_mode: 填充模式,有4种模式
    ⅰ. constant: 默认模式,像素值由fill设定
    ⅱ. edge: 边缘填充,像素值由图像边缘像素设定
    ⅲ. reflect: 镜像填充,最后一个像素不镜像,例: [ 1 , 2 , 3 , 4 ] → [ 3 , 2 , 1 , 2 , 3 , 4 , 3 , 2 ] [1, 2, 3, 4]→[3, 2, 1, 2, 3, 4, 3, 2] [1,2,3,4][3,2,1,2,3,4,3,2]
    ⅳ. symmetric: 镜像填充,最后一个像素镜像,例: [ 1 , 2 , 3 , 4 ] → [ 2 , 1 , 1 , 2 , 3 , 4 , 4 , 3 ] [1, 2, 3, 4]→[2, 1, 1, 2, 3, 4, 4, 3] [1,2,3,4][2,1,1,2,3,4,4,3]
  • fill: constant时,设置填充的像素值

2.3 transforms.RandomResizedCrop

torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(3/4, 4/3), interpolation=2)
  • 功能随机大小、长宽比裁剪图片
  • size: 所需裁剪图片尺寸
  • scale: 随机裁剪面积比例,默认(0.08, 1)
  • ratio: 随机长宽比,默认(3/4, 4/3)
  • interpolation: 插值方法
    PIL.Image.NEAREST 最邻近插值
    PIL.Image.BILINEAR 双线性插值
    PIL.Image.BICUBIC 双三次插值

2.4 transforms.FiveCrop

torchvision.transforms.FiveCrop(size)
  • 功能上下左右中心裁剪

2.5 transforms.TenCrop

torchvision.transforms.TenCrop(size, vertical_flip=False)
  • 功能上下左右中心裁剪后翻转,在图像的上下左右以及中心裁剪出尺寸为size的5张图片,TenCrop对这5张图片进行水平或者垂直镜像获得10张图片,
  • size: 所需裁剪图片尺寸
  • vertical_flip: 是否垂直翻转

transforms.Compose()使用

# torchvision.transforms.CenterCrop
# Compose装载操作组合的容器
# 定义Compose 先缩放 后中心裁剪 最后转为tensor张量
transforms = T.Compose([T.Resize(224),T.CenterCrop(224),T.ToTensor()])
# 传入transforms中的数据是PIL数据,lena_t为tensor
dog_t = transforms(dog)  
# 3*224*224 ; 当T.CenterCrop()的参数大于T.Resize()的参数时,周围用0填充
dog_t.shape  
# 最后再转换格式为PILImage
to_pil(dog_t)

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# torchvision.transforms.CenterCrop
# Compose装载操作组合的容器
# 定义Compose 先缩放 后随机裁剪,上下填充64 左右填充16 最后转为tensor张量
transforms = T.Compose([T.Resize(224),T.RandomCrop(224, padding=(16, 64)),T.ToTensor()])  
# 传入transforms中的数据是PIL数据,lena_t为tensor
dog_t = transforms(dog)  
# 3*224*224 ; 当T.CenterCrop()的参数大于T.Resize()的参数时,周围用0填充
dog_t.shape  
# 最后再转换格式为PILImage
to_pil(dog_t)
# Resize:缩放

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

3. transforms——Flip 翻转

3.1 transforms.RandomHorizontalFlip

torchvision.transforms.RandomHorizontalFlip(p=0.5)
  • 功能随机水平翻转

3.2 transforms.RandomVerticalFlip

torchvision.transforms.RandomVerticalFlip(p=0.5)
  • 功能依据水平(左右)或垂直(上下)翻转图片(随机垂直翻转)
  • p: 翻转概率

3.3 transforms.RandomRotation

torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None)
  • 功能随机旋转图片
  • degrees: 旋转角度
    当为a时,在(-a, a)之间选择旋转角度;
    当为(a, b)时,在(a, b)之间选择旋转角度。
  • resample: 重采样方法
  • expand: 是否扩大图片,以保持原图信息
  • center: 中心 例如 (0, 0)
# torchvision.transforms.RandomHorizontalFlip
# 随机水平翻转 
# 定义Compose 先缩放 后根据概率随机水平翻转 最后转为tensor张量
transforms = T.Compose([T.Resize(224),T.RandomHorizontalFlip(p=0.5),T.ToTensor()])  
# 传入transforms中的数据是PIL数据,lena_t为tensor
dog_t = transforms(dog)  
# 3*224*224 ; 当T.CenterCrop()的参数大于T.Resize()的参数时,周围用0填充
dog_t.shape 
to_pil(dog_t)

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# torchvision.transforms.RandomRotation
# 随机翻转 
# 定义Compose 先缩放 后随机旋转 30° 旋转中心(0, 0) 扩大图片 最后转为tensor张量
transforms = T.Compose([T.Resize(224),T.RandomRotation(30, center=(0, 0), expand=True),T.ToTensor()])  # Resize:缩放
# 传入transforms中的数据是PIL数据,lena_t为tensor
dog_t = transforms(dog)  
# 3*224*224 ; 当T.CenterCrop()的参数大于T.Resize()的参数时,周围用0填充
dog_t.shape 
to_pil(dog_t)

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

4. 图像变换

4.1 transforms.Pad

torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')
  • 功能对图像边缘进行填充
  • padding: 设置填充大小
    当为a时,上下左右均填充a个像素;
    当为(a, b)时,上下填充b个像素,左右填充a个像素;
    当为(a, b, c, d)时,左、上、右、下分别填充a、b、c、d。
  • padding_mode: 填充模式,有4种模式,constantedgereflectsymmetric 见上边详细
  • fill: constant时,设置填充的像素值,(R, G, B)or(Gray)
# constant padding 上下左右 20 填充红色RGB 
transforms = T.Compose([T.Resize(224),T.Pad(padding=20, fill=(255, 0, 0), padding_mode='constant'),T.ToTensor()])  # Resize:缩放

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# 镜像填充。这时`padding_mode`属性不是`constant`, fill 属性不再生效。
transforms = T.Compose([T.Resize(224),T.Pad(padding=(6, 12, 24, 48), fill=(255, 0, 0), padding_mode='symmetric'),T.ToTensor()])  # Resize:缩放

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

4.2 transforms.ColorJitter

torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
  • 功能调整亮度、对比度、饱和度和色相
  • brightness: 亮度调整因子
    当为a时,从 [𝑚𝑎𝑥(0,1−𝑎),1+𝑎] 中随机选择;
    当为(a, b)时,从 [𝑎,𝑏] 中随机选择。
  • contrast: 对比度参数,同brightness
  • saturation: 饱和度参数,同brightness
  • hue: 色相参数
    当为a时,从 [−𝑎,𝑎] 中选择参数,注: 0≤𝑎≤0.5
    当为(a, b)时,从 [𝑎,𝑏] 中选择参数,注: −0.5≤𝑎≤𝑏≤0.5
transforms = T.Compose([T.Resize(224),T.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.3),T.ToTensor()])  # Resize:缩放

狗狗颜色不太明显,换成了一只猫
这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

4.3 transforms.Grayscale

torchvision.transforms.Grayscale(num_output_channels=1)
  • 功能将图片转换为灰度图
  • num_output_channels: 输出的通道数。只能设置为 1 或者 3 (如果在后面使用了transforms.Normalize,则要设置为 3,因为transforms.Normalize只能接收 3 通道的输入)

这是原图:
在这里插入图片描述
处理过后:

4.4 transforms.RandomGrayscale

torchvision.transforms.RandomGrayscale(p=0.1)
  • 功能依概率将图片转换为灰度图
  • p: 概率值,图像被转换为灰度图的概率
transforms = T.Compose([T.Resize(224),T.RandomGrayscale(p=0.5),T.ToTensor()])  

4.5 transforms.RandomAffine

torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=0, fillcolor=0)
  • 功能对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切和翻转
  • translate: 平移区间设置,如(a, b),a设置宽(width),b设置高(height),图像在宽维度平移区间为 - img_width×a < dx < img_width×a
  • scale: 缩放比例(以面积为单位)
  • fill_color: 填充颜色设置
  • shear: 错切角度设置,有水平错切和垂直错切
    若为a,则仅在x轴错切,错切角度在(-a, a)之间;
    若为(a, b),则a设置x轴角度,b设置y的角度;
    若为(a, b, c, d),则a、b设置x轴角度,c、d设置y轴角度。
  • resample: 重采样方式,有NEAREST、BILINEAR、BICUBIC
# 中心旋转 30 度
transforms = T.Compose([T.Resize(224),T.RandomAffine(30),T.ToTensor()]) 

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# 平移
transforms = T.Compose([T.Resize(224),T.RandomAffine(degrees=0, translate=(0.5, 0.3)),T.ToTensor()])

这是原图:
在这里插入图片描述处理过后:
在这里插入图片描述

# 缩放
transforms = T.Compose([T.Resize(224),T.RandomAffine(degrees=0, scale=(0.6, 0.6)),T.ToTensor()])  # Resize:缩放

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# 错切
transforms = T.Compose([T.Resize(224),T.RandomAffine(degrees=0, shear=(0, 30, 0, 30)),T.ToTensor()]) 

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

# 错切
transforms = T.Compose([T.Resize(224),T.RandomAffine(degrees=0, shear=30, fillcolor=(255, 0, 0)),T.ToTensor()])

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

4.6 transforms.RandomErasing

torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)
  • 功能对图像进行随机遮挡
  • p: 概率值,执行该操作的概率
  • scale: 遮挡区域的面积
  • ratio: 遮挡区域长宽比
  • value: 设置遮挡区域的像素值,(R, G, B)or(Gray)
# 对图像进行随机遮挡。
# 输入是 tensor  先执行transforms.ToTensor()
transforms = T.Compose([T.Resize(224), T.ToTensor(), T.RandomErasing(p=0.5, scale=(0.03, 0.32), ratio=(0.2, 3.0), value=0, inplace=False)])

这是原图:
在这里插入图片描述
处理过后:
在这里插入图片描述

transforms = T.Compose([T.Resize(224), T.ToTensor(), T.RandomErasing(p=1, scale=(0.03, 0.32), ratio=(0.2, 3.0), value='random')])

在这里插入图片描述

4.7 transforms.Lambda

torchvision.transforms.Lambda(lambd)
  • 功能用户自定义lambda方法
  • lambd: lambda匿名函数
    例如:transforms.Lambda(lambda crops: torch.stack([transforms.Totensor()(crop) for crop in crops]))

4.8 transforms.Resize

  • 功能将输入图像(PIL Image or Tensor)调整为给定的大小。如果图像是torch张量,则期望它具有[C,H, W]形状,C其中表示任意数量的张量维度
  • size (sequence or int): 期望输出大小。如果size是(h, w)这样的序列,则输出size将与此匹配。如果size为int,图像的较小边缘将匹配此数字。即,如果高度>宽度,那么图像将被重新缩放为(size*高度/宽度,size)
  • interpolation (InterpolationMode): 由torchvision.transforms.InterpolationMode定义的期望插值枚举。默认为InterpolationMode.BILINEAR。如果输入是张量,只有InterpolationMode
  • max_size (int, optional): 调整后图像的长边允许的最大值:如果根据size调整后图像的长边大于max size,则再次调整图像,使长边等于max size。因此,size可能被否决,即较小的边可能比大小短。这只在size为int(或在torchscript模式下长度为1的序列)时才支持。
  • antialias (bool, optional): 抗锯齿标志。如果img是PIL Image,该标志将被忽略,并且始终使用反别名。如果img是Tensor,该标志默认为False, InterpolationMode可以设置为True。双线性和插值模式。双三次的模式。这有助于使PIL图像的输出和张量更接近。

4.9 transforms.Totensor

  • 功能:将原始的PILImage格式或者numpy.array格式的数据格式化为可被pytorch快速处理的张量类型。
    输入模式为(L、LA、P、I、F、RGB、YCbCr、RGBA、CMYK、1)的PIL Image或numpy.ndarray (形状为H x W x C)数据范围是[0, 255] 到一个Torch.FloatTensor,其形状 (C x H x W) 在 [0.0, 1.0] 范围内。
import numpy as np
from torchvision import transformsa = np.random.random((224,224,3))
transform = transforms.Compose([transforms.ToTensor()
])
b = transform(a)
print(b.shape)
# torch.Size([3, 224, 224])

4.10 transforms.Normalize

数据标准化,即均值为0,标准差为1

  • 功能:要将图像三个通道的数据 整理到 [-1,1] 之间 ,可以加快模型的收敛
    对图像张量的每一个数据进行如下公式操作:
    output[channel] = (input[channel] - mean[channel]) / std[channel],
    返回归一化张量图像 (返回类型 type)
  • mean:(sequence)每个通道的均值序列
  • std:(sequence)每个通道的标准差序列
  • inplace:(bool,可选)bool值,使该操作就地执行

5. transforms的操作

5.1 transforms.RandomChoice

torchvision.transforms.RandomChoice(transforms)
  • 功能:从一系列transforms方法中随机挑选一个

5.2 transforms.RandomApply

torchvision.transforms.RandomApply(transforms, p=0.5)
  • 功能依据概率执行一组transforms操作

5.3 transforms.RandomOrder

torchvision.transforms.RandomOrder(transforms)
  • 功能:对一组transforms操作打乱顺序

6. 自定义transforms

自定义transforms要素

  • 仅接收一个参数,返回一个参数
  • 注意上下游的输出与输入
class Compose(object):def __call__(self, img):for t in transforms:img = t(img)return img

通过类实现多参数传入:

class YourTransforms(object):def __init__(self, transforms):self.transforms = transformsdef __call__(self, img):for t in self.transforms:img = t(img)return img

椒盐噪声又称为脉冲噪声,是一种随机出现的白点或者黑点,白点称为盐噪声,黑色为椒噪声。
信噪比(Signal-Noise Rate,SNR)是衡量噪声的比例,图像中为图像像素的占比。

class AddPepperNoise(object):def __init__(self, snr, p):self.snr = snrself.p = pdef __call__(self, img):# 添加椒盐噪声具体实现过程img = Nonereturn img

汇总

transforms方法

  1. 裁剪
    a. transforms.CenterCrop
    b. transforms.RandomCrop
    c. transforms.RandomResizedCrop
    d. transforms.FiveCrop
    e. transforms.TenCrop
  2. 翻转和旋转
    a. transforms.RandomHorizontalFlip
    b. transforms.RandomVerticalFlip
    c. transforms.RandomRotation
  3. 图像变换
    a. transforms.Pad
    b. transforms.ColorJitter
    c. transforms.Grayscale
    d. transforms.RandomGrayscale
    e. transforms.RandomAffine
    f. transforms.LinearTransformation
    g. transforms.RandomErasing
    h. transforms.Lambda
    i. transforms.Resize
    j. transforms.Totensor
    k. transforms.Normalize
  4. transforms的操作
    a. transforms.RandomChoice
    b. transforms.RandomApply
    c. transforms.RandomOrder

部分学习内容来自: 天池实验室

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

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

相关文章

leetcode 817. 链表组件(java)

链表组件 题目描述HashSet 模拟 题目描述 给定链表头结点 head&#xff0c;该链表上的每个结点都有一个 唯一的整型值 。同时给定列表 nums&#xff0c;该列表是上述链表中整型值的一个子集。 返回列表 nums 中组件的个数&#xff0c;这里对组件的定义为&#xff1a;链表中一段…

zabbix学习1--zabbix6.x单机

文章目录 1. 环境2. MYSQL8.02.1 单节点2.2 配置主从 3. 依赖组件4. zabbix-server5. agent5.1 yum5.2 编译 附录my.cnfJDK默认端口号 1. 环境 进入官网查看所需部署环境配置以及应用版本要求https://www.zabbix.com/documentation/current/zh/manual/installation/requiremen…

MySQL 解决数据重复添加

1. sql语句: insert ignore into insert ignore into 表名 (xx1,xx2,xx3) VALUES (#{xx1},#{xx2},#{xx3}) 2. 复合索引

7-38 掉入陷阱的数字

输入样例: 5 输出样例: 1:16 2:22 3:13 4:13 ACcode: #include <bits/stdc.h>using namespace std;int main(){int n;cin >> n;vector<int> ans;int limit 1;ans.push_back(n);for(int i0; i<limit; i){//各位数字的和int sum 0;int num ans[i];w…

echarts的折线图,在点击图例后,提示出现变化,不报错。tooltip的formatter怎么写

在点击图例的年后&#xff0c;提示框会相应的变化&#xff0c;多选和单选都会响应变化。tooptip的重度在formatter tooltip:{show:true,trigger:"axis",alwaysShowContent:true,triggerOn:"mousemove",textStyle:{color:"#fff"},backgroundColor…

平板用的触控笔什么牌子好?开学值得推荐的ipad手写笔

在开学季有什么电容笔值得购买&#xff1f;和以往的电容笔比起来&#xff0c;目前的电容笔多出了许多新的功能&#xff0c;比如具备了防误触功能&#xff0c;可以防止手指无意中碰到屏幕而导致书写失灵&#xff0c;以及可以随意调节笔画的粗细等等。苹果原装的Pencil如今卖得非…

微信小程序 按钮颜色

<button type"primary">主要按钮样式类型</button> <button type"default">默认按钮样式类型</button> <button type"warn">警告按钮样式类型</button> <view>按钮plain是否镂空</view> <bu…

1.简单工厂模式

UML类图 代码 main.cpp #include <iostream> #include "OperationFactory.h" using namespace std;int main(void) {float num1;float num2;char operate;cin >> num1 >> num2 >> operate;Operation* oper OperationFactory::createOpera…

Mars3d插件参考开发教程并在相关页面引入

问题场景&#xff1a; 1.在使用Mars3d热力图功能时&#xff0c;提示mars3d.layer.HeatLayer is not a constructor 问题原因: 1.mars3d的热力图插件mars3d-heatmap没有安装引用。 解决方案&#xff1a; 1.参考开发教程&#xff0c;找到相关的插件库&#xff1a;Mars3D 三维…

Taro小程序隐私协议开发指南填坑

一. 配置文件app.config.js export default {...__usePrivacyCheck__: true,... }二. 开发者工具基础库修改 原因&#xff1a;从基础库 2.32.3 开始支持 修改路径&#xff1a;详情->本地设置->调试基础库 三. 用户隐私保护指引更新 修改路径&#xff1a;mp后台->设…

二叉树的几个递归问题

我的主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言&#xff1a; 二叉树的递归是二叉树很重要的问题&#xff0c;几乎解决二叉树的问题都要使用递归&#xff0c;接下来我们将解决二叉树几个最基础的递归问题。 目录 前言&#xff1a; 二叉树的前序&#xff0c;中序&…

【GAN入门】生成 AI的概念

一、说明 GAN是生成对抗网络&#xff08;Generative Adversarial Network&#xff09;的缩写&#xff0c;是一种无监督学习算法&#xff0c;由Goodfellow等人于2014年提出。GAN由一个生成器网络和一个判别器网络组成&#xff0c;通过二者之间的对抗来训练生成器网络生成与真实样…

用Python实现链式调用

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 我们在使用Django的models查询数据库时&#xff0c;可以看到有这种写法&#xff1a; form app.models import XXX query XXX.objects.all() query query.filter(name123, age456).filter(salary999)在这种写法里面&#xf…

AI生成文章-AI文章生成工具

随着社会的发展人工智能技术的突破&#xff0c;越来越多的人开始使用AI来生成文章&#xff0c;但是有一个问题一直困扰着大家&#xff1a;AI生成的文章会不会变得千篇一律&#xff0c;重复无新意呢&#xff1f; AI生成文章的兴起 让我们简要回顾一下AI生成文章的兴起。随着深度…

ES6——知识点记录

这里写目录标题 1.字符串支持1.codePointAt——根据字符串码元的位置得到其码点2.includes——判断字符串中是否包含指定的子字符串3.startsWith——判断字符串中是否以指定的字符串开始4.endsWith——判断字符串中是否以指定的字符串结尾5.repeat——将字符串重复指定的次数&a…

JDBC 学习笔记(基础)

示意图 目录 创建 JDBC 应用 例子&#xff1a;通过本地协议纯 Java 驱动程序实现JDBC 代码具体步骤&#xff1a; 1.注册驱动 2.建立与数据库的连接 3.获取执行SQL语句的对象 Statement 4.定义执行 SQL 语句 5.操作结果集对象 ResultSet 6.关闭操作对象及连接对象 JD…

【Tricks】关于如何防止edge浏览器偷取chrome浏览器的账号

《关于如何防止edge浏览器偷取chrome浏览器的账号》 前段时间edge自动更新了&#xff0c;我并没有太在意界面的问题。但是由于我使用同一个网站平台时&#xff0c;例如b站&#xff0c;甚至是邮箱&#xff0c;edge的账号和chrome的账号会自动同步&#xff0c;这就导致我很难短时…

CSS 实现祥云纹理背景

&#x1fab4; 背景 最近掘金出来一个中秋创意活动&#xff0c;我准备参加一下。作品方向选择用纯css做一个中秋贺卡&#xff0c;其中有一些中秋的元素和一些简单的动画&#xff0c;而贺卡背景的实现就是本文要讲的内容。 中秋贺卡成果图&#xff08;生成gif有点失真&#x1f6…

亚马逊鲲鹏系统日程控制功能可自动管理你的买家号

亚马逊鲲鹏系统是一款针对亚马逊买家号功能比较齐全的软件&#xff0c;可以批量注册、智能养号、自动下单、自动留评、QA等&#xff0c;这一系列功能都可以用日程控制进行管理操作。日程控制管理可以让你在吃饭睡觉、逛街玩耍时自动管理你的买家账号。 日程管理功能可以设置每月…

数据结构——二叉搜索树

二叉搜索树是二叉树的一种特殊形式。 二叉搜索树具有以下性质&#xff1a; 1.每个节点中的值必须大于&#xff08;或等于&#xff09;其左侧子树中的任何值 2.每个节点中的值必须小于&#xff08;或等于&#xff09;其右侧子树中的任何值。 像普通的二叉树一样&#xff0c;我们…