opencv-python图像增强十五:高级滤镜实现

news2024/11/8 6:39:18

文章目录

  • 前言
  • 二、鲜食滤镜
  • 三、巧克力滤镜
  • 三,冷艳滤镜:


前言

在之前两个滤镜文章中介绍了六种简单的滤镜实现,它们大多都是由一个单独函数实现的接下来介绍五种结合了之前图像增强文章提的的算法的复合滤镜。本案例中的算法来自于文章一,文章二,文章三,感兴趣的小伙伴可以看看。

二、鲜食滤镜

鲜食滤镜是一种图像处理技术,旨在提升食物照片的吸引力,通过增强色彩饱和度和对比度,提高亮度并减少阴影,以及锐化处理来使食物色彩鲜艳、质感清晰;同时,它还会调整色调以增加暖意,去除背景杂色,优化食物细节,并通过调整高光和阴影来模仿新鲜食物的自然光泽,从而使食物看起来更加诱人和新鲜。
算法实现:
图像锐化增强食物对比度,图像阴影区域减弱提升暗部细节,饱和度提升提亮食物颜色
算法实现:

import cv2
import numpy as np

def shadow(input_image, light):
    # 将输入图像转换为浮点类型并归一化,便于后续处理
    f = input_image.astype(np.float32) / 255.0
    # 使用OpenCV将归一化的图像转换为灰度图
    gray = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)

    # 计算灰度图的平方,用以确定阴影区域
    thresh = (1.0 - gray) ** 2
    # 计算阴影区域的平均值,用作后续的阈值
    t = np.mean(thresh)
    # 创建一个掩码,标记阴影区域(高于平均值的区域)
    mask = np.where(thresh >= t, 255, 0).astype(np.uint8)
    # 设置校正参数
    max_val = 4  # 最大校正范围
    bright = light / 100.0 / max_val  # 计算校正强度
    mid = 1.0 + max_val * bright  # 计算中间值
    # 创建两个过渡矩阵,用于调整图像的亮度和对比度
    midrate = np.where(mask == 255, mid, ((mid - 1.0) / t * thresh) + 1.0)
    brightrate = np.where(mask == 255, bright, (1.0 / t * thresh) * bright)
    # 使用指数函数调整图像亮度,并通过掩码实现平滑过渡
    result = np.clip(pow(f, 1.0 / midrate[:, :, np.newaxis]), 0.0, 1.0)
    # 根据计算出的亮度率调整图像,限制值在0到1之间
    result = np.clip(result * (1.0 / (1 - brightrate[:, :, np.newaxis])), 0.0, 1.0) * 255
    # 将结果转换为8位无符号整型,以便显示和保存
    result = result.astype(np.uint8)
    return result

def Saturation(rgb_img, increment):
    # 将输入图像转换为浮点数,并归一化到0-1范围
    img = rgb_img.astype(np.float64) / 255.0
    # 计算每个像素的最小值,即HSL颜色空间中的亮度最低的部分
    img_min = img.min(axis=2)
    # 计算每个像素的最大值,即HSL颜色空间中的亮度最高的部分
    img_max = img.max(axis=2)

    # 计算饱和度(delta)和亮度(value)的中间值
    delta = (img_max - img_min)
    value = (img_max + img_min)
    # 计算HSL颜色空间中的亮度L
    L = value / 2.0

    # 根据亮度L计算饱和度s的两个可能值
    s1 = delta / (value + 1e-8)  # 防止除以0的情况,添加一个很小的数
    s2 = delta / (2 - value + 1e-8)
    # 根据亮度L选择饱和度s的正确值
    s = np.where(L < 0.5, s1, s2)

    # 计算增量调整后的饱和度,如果饱和度加上增量大于1,则保持原饱和度,否则用1减去增量
    temp = increment + s
    alpha = np.where(temp > 1, s, 1 - increment)
    # 计算调整后的alpha值
    alpha = 1 / alpha - 1

    # 对RGB图像的每个通道进行调整,以改变饱和度
    for i in range(3):
        img[:, :, i] += (img[:, :, i] - L) * alpha
    # 确保调整后的RGB值在0到1之间,如果超出这个范围,则将其限制在这个范围内
    img = np.clip(img, 0, 1)

    # 返回调整后的图像
    return img


def laplacian_sharpening(image, kernel_size=3, scale=0.03, delta=0):
    """
    Apply Laplacian sharpening to an image.

    Parameters:
    image: The input image in BGR format.
    kernel_size: The size of the Laplacian kernel (must be 1, 3, 5, or 7).
    scale: The optional scale factor for the computed Laplacian values.
    delta: The optional delta value added to the results prior to storing them.

    Returns:
    The sharpened image.
    """
    # Check if kernel size is valid
    if kernel_size not in [1, 3, 5, 7]:
        raise ValueError("Kernel size must be 1, 3, 5, or 7.")

    # Convert the image to grayscale
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # Compute the Laplacian of the image
    laplacian = cv2.Laplacian(gray_image, cv2.CV_64F, ksize=kernel_size, scale=scale, delta=delta)

    # Convert Laplacian image to 8-bit
    laplacian_8u = cv2.convertScaleAbs(laplacian)

    # Convert the 8-bit Laplacian image to BGR
    laplacian_8u_bgr = cv2.cvtColor(laplacian_8u, cv2.COLOR_GRAY2BGR)

    # Add the Laplacian image to the original image
    sharpened_image = cv2.addWeighted(image, 1, laplacian_8u_bgr, 1.5, 0)

    return sharpened_image

img = cv2.imread(r"D:\AI_tool\GFPGAN-master\1.jpg")
img = cv2.resize(img,(0,0),fx=0.5,fy=0.5)
lap=laplacian_sharpening(img)
shd=shadow(lap,-10)
sat=Saturation(shd,0.3)
cv2.imshow("img",img)
cv2.imshow("sat",sat)

cv2.waitKey(0)

原图:
在这里插入图片描述
效果:
在这里插入图片描述

三、巧克力滤镜

巧克力滤镜是一种图像处理效果,它通过增加棕色调、降低亮度并轻微增加对比度,使照片呈现出类似巧克力的温暖和浓郁感,常用于增强食物、饮品以及某些场景的视觉效果,使其显得更加诱人和舒适。
算法实现:
首先增强巧克力对比度与亮度,在对增强后的图像进行锐化以及阴影处理,最后提升巧克力颜色的饱和度让其更有食欲:

import cv2
import numpy as np

def shadow(input_image, light):
    # 将输入图像转换为浮点类型并归一化,便于后续处理
    f = input_image.astype(np.float32) / 255.0
    # 使用OpenCV将归一化的图像转换为灰度图
    gray = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)

    # 计算灰度图的平方,用以确定阴影区域
    thresh = (1.0 - gray) ** 2
    # 计算阴影区域的平均值,用作后续的阈值
    t = np.mean(thresh)
    # 创建一个掩码,标记阴影区域(高于平均值的区域)
    mask = np.where(thresh >= t, 255, 0).astype(np.uint8)
    # 设置校正参数
    max_val = 4  # 最大校正范围
    bright = light / 100.0 / max_val  # 计算校正强度
    mid = 1.0 + max_val * bright  # 计算中间值
    # 创建两个过渡矩阵,用于调整图像的亮度和对比度
    midrate = np.where(mask == 255, mid, ((mid - 1.0) / t * thresh) + 1.0)
    brightrate = np.where(mask == 255, bright, (1.0 / t * thresh) * bright)
    # 使用指数函数调整图像亮度,并通过掩码实现平滑过渡
    result = np.clip(pow(f, 1.0 / midrate[:, :, np.newaxis]), 0.0, 1.0)
    # 根据计算出的亮度率调整图像,限制值在0到1之间
    result = np.clip(result * (1.0 / (1 - brightrate[:, :, np.newaxis])), 0.0, 1.0) * 255
    # 将结果转换为8位无符号整型,以便显示和保存
    result = result.astype(np.uint8)
    return result

def Saturation(rgb_img, increment):
    # 将输入图像转换为浮点数,并归一化到0-1范围
    img = rgb_img.astype(np.float64) / 255.0
    # 计算每个像素的最小值,即HSL颜色空间中的亮度最低的部分
    img_min = img.min(axis=2)
    # 计算每个像素的最大值,即HSL颜色空间中的亮度最高的部分
    img_max = img.max(axis=2)

    # 计算饱和度(delta)和亮度(value)的中间值
    delta = (img_max - img_min)
    value = (img_max + img_min)
    # 计算HSL颜色空间中的亮度L
    L = value / 2.0

    # 根据亮度L计算饱和度s的两个可能值
    s1 = delta / (value + 1e-8)  # 防止除以0的情况,添加一个很小的数
    s2 = delta / (2 - value + 1e-8)
    # 根据亮度L选择饱和度s的正确值
    s = np.where(L < 0.5, s1, s2)

    # 计算增量调整后的饱和度,如果饱和度加上增量大于1,则保持原饱和度,否则用1减去增量
    temp = increment + s
    alpha = np.where(temp > 1, s, 1 - increment)
    # 计算调整后的alpha值
    alpha = 1 / alpha - 1

    # 对RGB图像的每个通道进行调整,以改变饱和度
    for i in range(3):
        img[:, :, i] += (img[:, :, i] - L) * alpha
    # 确保调整后的RGB值在0到1之间,如果超出这个范围,则将其限制在这个范围内
    img = np.clip(img, 0, 1)

    # 返回调整后的图像
    return img


def laplacian_sharpening(image, kernel_size=3, scale=0.01, delta=0):
    """
    Apply Laplacian sharpening to an image.

    Parameters:
    image: The input image in BGR format.
    kernel_size: The size of the Laplacian kernel (must be 1, 3, 5, or 7).
    scale: The optional scale factor for the computed Laplacian values.
    delta: The optional delta value added to the results prior to storing them.

    Returns:
    The sharpened image.
    """
    # Check if kernel size is valid
    if kernel_size not in [1, 3, 5, 7]:
        raise ValueError("Kernel size must be 1, 3, 5, or 7.")

    # Convert the image to grayscale
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # Compute the Laplacian of the image
    laplacian = cv2.Laplacian(gray_image, cv2.CV_64F, ksize=kernel_size, scale=scale, delta=delta)

    # Convert Laplacian image to 8-bit
    laplacian_8u = cv2.convertScaleAbs(laplacian)
    # Convert the 8-bit Laplacian image to BGR
    laplacian_8u_bgr = cv2.cvtColor(laplacian_8u, cv2.COLOR_GRAY2BGR)
    # Add the Laplacian image to the original image
    sharpened_image = cv2.addWeighted(image, 1, laplacian_8u_bgr, 1.5, 0)
    return sharpened_image
img = cv2.imread(r"D:\AI_tool\GFPGAN-master\2.jpg")
img = cv2.resize(img,(0,0),fx=0.5,fy=0.5)
abs = cv2.convertScaleAbs(img, alpha=1.3, beta=10)
lap=laplacian_sharpening(abs)
shd=shadow(lap,-20)
sat=Saturation(shd,0.3)
cv2.imshow("img",img)
cv2.imshow("sat",sat)

cv2.waitKey(0)

效果:
在这里插入图片描述
在这里插入图片描述

三,冷艳滤镜:

人物冷艳滤镜是一种图像处理效果,它通过降低色调的温度,增加蓝色的分量,同时减少红色和绿色,使得人物肤色和整体画面呈现出一种冷静、高傲的美感。这种滤镜通常用于肖像摄影,能够营造出一种距离感、神秘感和高级感,让人物显得更加清冷、优雅,适合表现人物的独特气质和深邃眼神。
算法实现:
先调节色温让颜色偏冷,在对人物进行锐化与对比度增强提升人像细节,降低图像阴影并修正人物颜色

import cv2
import numpy as np


def create_lut(level):
    # 创建一个查找表(LUT),范围从0到255
    lut = np.arange(256, dtype=np.uint8)
    # 更复杂的颜色映射,这里使用简单的线性映射作为示例
    # 实际上,可以在这里使用更复杂的非线性映射
    for i in range(256):
        if i + level > 255:
            lut[i] = 255
        elif i + level < 0:
            lut[i] = 0
        else:
            lut[i] = i + level
    return lut


def apply_lut(image, lut):
    # 使用OpenCV的LUT函数应用查找表
    return cv2.LUT(image, lut)


def color_temperature(input, n):
    result = input.copy()
    level = n // 2
    # 创建查找表并应用它到RGB通道
    lut_r = create_lut(level)
    lut_g = create_lut(level)
    lut_b = create_lut(-level)
    result[:, :, 2] = apply_lut(result[:, :, 2], lut_r)  # R通道
    result[:, :, 1] = apply_lut(result[:, :, 1], lut_g)  # G通道
    result[:, :, 0] = apply_lut(result[:, :, 0], lut_b)  # B通道
    return result


def shadow(input_image, light):
    # 将输入图像转换为浮点类型并归一化,便于后续处理
    f = input_image.astype(np.float32) / 255.0
    # 使用OpenCV将归一化的图像转换为灰度图
    gray = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)

    # 计算灰度图的平方,用以确定阴影区域
    thresh = (1.0 - gray) ** 2
    # 计算阴影区域的平均值,用作后续的阈值
    t = np.mean(thresh)
    # 创建一个掩码,标记阴影区域(高于平均值的区域)
    mask = np.where(thresh >= t, 255, 0).astype(np.uint8)
    # 设置校正参数
    max_val = 4  # 最大校正范围
    bright = light / 100.0 / max_val  # 计算校正强度
    mid = 1.0 + max_val * bright  # 计算中间值
    # 创建两个过渡矩阵,用于调整图像的亮度和对比度
    midrate = np.where(mask == 255, mid, ((mid - 1.0) / t * thresh) + 1.0)
    brightrate = np.where(mask == 255, bright, (1.0 / t * thresh) * bright)
    # 使用指数函数调整图像亮度,并通过掩码实现平滑过渡
    result = np.clip(pow(f, 1.0 / midrate[:, :, np.newaxis]), 0.0, 1.0)
    # 根据计算出的亮度率调整图像,限制值在0到1之间
    result = np.clip(result * (1.0 / (1 - brightrate[:, :, np.newaxis])), 0.0, 1.0) * 255
    # 将结果转换为8位无符号整型,以便显示和保存
    result = result.astype(np.uint8)
    return result

def Saturation(rgb_img, increment):
    # 将输入图像转换为浮点数,并归一化到0-1范围
    img = rgb_img.astype(np.float64) / 255.0
    # 计算每个像素的最小值,即HSL颜色空间中的亮度最低的部分
    img_min = img.min(axis=2)
    # 计算每个像素的最大值,即HSL颜色空间中的亮度最高的部分
    img_max = img.max(axis=2)

    # 计算饱和度(delta)和亮度(value)的中间值
    delta = (img_max - img_min)
    value = (img_max + img_min)
    # 计算HSL颜色空间中的亮度L
    L = value / 2.0

    # 根据亮度L计算饱和度s的两个可能值
    s1 = delta / (value + 1e-8)  # 防止除以0的情况,添加一个很小的数
    s2 = delta / (2 - value + 1e-8)
    # 根据亮度L选择饱和度s的正确值
    s = np.where(L < 0.5, s1, s2)

    # 计算增量调整后的饱和度,如果饱和度加上增量大于1,则保持原饱和度,否则用1减去增量
    temp = increment + s
    alpha = np.where(temp > 1, s, 1 - increment)
    # 计算调整后的alpha值
    alpha = 1 / alpha - 1

    # 对RGB图像的每个通道进行调整,以改变饱和度
    for i in range(3):
        img[:, :, i] += (img[:, :, i] - L) * alpha
    # 确保调整后的RGB值在0到1之间,如果超出这个范围,则将其限制在这个范围内
    img = np.clip(img, 0, 1)

    # 返回调整后的图像
    return img


def laplacian_sharpening(image, kernel_size=3, scale=0.05, delta=0):
    """
    Apply Laplacian sharpening to an image.

    Parameters:
    image: The input image in BGR format.
    kernel_size: The size of the Laplacian kernel (must be 1, 3, 5, or 7).
    scale: The optional scale factor for the computed Laplacian values.
    delta: The optional delta value added to the results prior to storing them.

    Returns:
    The sharpened image.
    """
    # Check if kernel size is valid
    if kernel_size not in [1, 3, 5, 7]:
        raise ValueError("Kernel size must be 1, 3, 5, or 7.")

    # Convert the image to grayscale
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # Compute the Laplacian of the image
    laplacian = cv2.Laplacian(gray_image, cv2.CV_64F, ksize=kernel_size, scale=scale, delta=delta)

    # Convert Laplacian image to 8-bit
    laplacian_8u = cv2.convertScaleAbs(laplacian)

    # Convert the 8-bit Laplacian image to BGR
    laplacian_8u_bgr = cv2.cvtColor(laplacian_8u, cv2.COLOR_GRAY2BGR)

    # Add the Laplacian image to the original image
    sharpened_image = cv2.addWeighted(image, 1, laplacian_8u_bgr, 1.5, 0)

    return sharpened_image

img = cv2.imread(r"D:\AI_tool\GFPGAN-master\273813a415dbe086179ec092b693e8bb.jpg")
img = cv2.resize(img,(0,0),fx=0.5,fy=0.5)
col=color_temperature(img,-20)
abs = cv2.convertScaleAbs(col, alpha=1.1, beta=-10)

lap=laplacian_sharpening(abs)
shd=shadow(lap,-20)
sat=Saturation(shd,0.1)

cv2.imshow("img",img)
cv2.imshow("sat",shd)
cv2.waitKey(0)

效果:

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【数学建模】TOPSIS法(优劣解距离法)

TOPSIS法&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff0c;优劣解距离法&#xff09;是一种多准则决策分析方法&#xff0c;它基于这样一个概念&#xff1a;最理想的方案应该是距离理想解最近而距离负理想解最远的方案。以下是使用TOPS…

【React原理 - 任务调度和时间分片详解】

概述 在React15的时候&#xff0c;React使用的是从根节点往下递归的方式同步创建虚拟Dom&#xff0c;由于递归具有同步不可中断的特性&#xff0c;所以当执行长任务时(通常以60帧为标准&#xff0c;即16.6ms)就会长时间占用主线程长时间无响应&#xff0c;导致页面卡顿&#x…

如何使用Gitee管理自己的项目

如何使用Gitee管理自己的项目 前言 本地创建的工程项目不利于管理&#xff0c;电脑设备丢失损坏&#xff0c;代码就找不回来了。 并且多人同时使用一个项目工程也不方便。 国内的代码托管平台&#xff0c;Gitee为我实现了远程代码管理。 并且该平台可以设置为开源和私有两种…

公司邮箱如何建立

而建立一套完善的公司邮箱系统&#xff0c;则是实现这一目标的重要一环。本文将深入探讨公司邮箱的建立过程&#xff0c;以及其在业务中的重要性。 1. 确定邮箱域名 公司邮箱的建立首先要确定一个专属的邮箱域名。域名是公司在网络上的身份标识&#xff0c;例如&#xff0c;公…

程序猿成长之路之数据挖掘篇——Kmeans聚类算法

Kmeans 是一种可以将一个数据集按照距离&#xff08;相似度&#xff09;划分成不同类别的算法&#xff0c;它无需借助外部标记&#xff0c;因此也是一种无监督学习算法。 什么是聚类 用官方的话说聚类就是将物理或抽象对象的集合分成由类似的对象组成的多个类的过程。用自己的…

VSCode插件 live Server

普通打开 安装live Server 包含端口 说明内置了服务器

改造小蚁摄像头支持免费无限容量云储存(Samba挂载篇)

为什么要改造&#xff1f; 插卡摄像头最大的一个问题就是频繁的读写会导致内存卡寿命急速下降&#xff0c;哪怕是市面上支持NAS转存的摄像头也是先录制到SD卡里&#xff0c;然后把SD卡上的视频再转存到NAS。同样对内存卡和NAS硬盘寿命都是损耗巨大。而这类监控视频绝大多数情况…

重磅!小米将对外公开超 1000 万行的 Xiaomi Vela 开源代码

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 如果说接下来的澎湃OS系统会带来很强的吸引力&#xff0c;那么第二个惊喜也是随之而来&#xff0c;那就是小米Vela开源大动作。 早在2017年起&#xff0c;小米就活跃于 NuttX 社区&#xff0c…

Reinforcement-Learning 2.State Value and Bellman Equation

目录 0.Outline 1.Motivating examples Motivating example 1: Why return is important? Motivating example 2: How to calculate return? 2.State value 3.Bellman equation: Derivation Deriving the Bellman equation An illustrative example Exercise 4.Be…

FreeSWITCH 1.10.10 简单图形化界面28 - 麒麟V10 SP3服务器系统X86和ARM版本安装FreeSWITCH

FreeSWITCH 1.10.10 简单图形化界面28 - 麒麟V10 SP3 服务器系统X86和ARM版本安装FreeSWITCH 界面预览00、先看使用手册01、 麒麟服务器v10 sp3 x86版本1、安装操作系统2、下载安装脚本3、安装 02、麒麟服务器v10 sp3 arm版本1、安装操作系统2、下载安装脚本3、安装 03、登录网…

搭建一个私有的知识库mm-wiki

文章目录 前言一、mm-wiki二、安装步骤下载安装 总结 前言 一般公司内部想要记录一些东西,都需要一个共享文档,当然可以选择类似比较简单易用的,有道云笔记,腾讯文档,语雀等,但是肯定有些公司是保密的,所以不希望这些数据被泄露,当然选择本地存储是最安全的~ 一、mm-wiki 对于…

vue3+vite配置环境变量实现开发、测试、生产的区分

文章目录 一、为什么需要区分 (dev)、测试 (test) 和生产 (prod) 环境二、vue3的项目如何通过配置方式区分不同的环境1、创建不同环境的.env文件2、在不同的.env文件中配置相应的环境变量1&#xff09;.env.develoment2&#xff09;.env.test3&#xff09;.env.production 3、在…

查找2

树表的查找 1&#xff09;二叉排序树 I)二叉排序树的插入 II)二叉排序树的生成 III)二叉排序树的删除 2&#xff09;平衡二叉树 I&#xff09;平衡二叉树调整 、

MMOE+ESSM

MMOE 动机 多个任务之间的相关性并不是很强&#xff0c;这个时候如果再用过去那种共享底座embedding的结构&#xff0c;往往会导致『跷跷板』现象。 当前学术界已经有很多工作意识到1中描述的问题并且尝试去解决&#xff0c;但大多数工作的套路都是『大力出奇迹』的路子&…

zigbee笔记、十五、组播通信原理

一、zigbee四种通讯 1、单播&#xff08;略&#xff09; 2、广播&#xff08;略&#xff09; 3、组播&#xff1a;在zigbee网络中&#xff0c;模块可以用分组来标记&#xff0c;发送的模块如果发送的组号和网络里面标记接收模块的组号相对应&#xff0c;那么这些模块就可以拿到…

深度剖析渗透测试:流程、规范与实战全指南

一、引言 在当今数字化时代&#xff0c;网络安全问题日益凸显。渗透测试作为一种主动的安全评估方法&#xff0c;能够帮助企业和组织发现潜在的安全漏洞&#xff0c;提高系统的安全性。本文将详细介绍渗透测试的实施流程、规范、不同类型的测试方法以及相关的 checklist 和报告…

Matlab处理H5文件

1.读取h5文件 filenamexxx.h5; h5disp(filename) 2.h5文件保存为mat文件 读取 HDF5 文件中的数据 % 指定 HDF5 文件的路径 filename xxx.h5;% 读取 HDF5 文件中的各个数据集 A241_P h5read(filename, /A241_P); A241_W h5read(filename, /A241_W); A242_P h5read(filen…

ensp 中 wlan 的配置过程和示例

一、拓朴&#xff1a; 要求&#xff1a;vlan20 用于笔记本上网&#xff0c;使用Huawei信号&#xff0c;vlan30 用于手机上网&#xff0c;使用 Huawei-5G 信号 二、配置过程&#xff1a; 1、SW1 基本配置&#xff1a; 起 vlan batch 10 20 30&#xff0c;10 为管理 vlan&#…

Acrobat Pro DC 2024 for mac/Win:跨平台PDF编辑与管理的巅峰之作

Adobe Acrobat Pro DC 2024是一款专为Mac和Windows用户设计的全面PDF解决方案软件&#xff0c;它集成了创建、编辑、转换、共享和签署PDF文件的强大功能&#xff0c;为用户带来前所未有的高效与便捷体验。 强大的PDF编辑功能 Acrobat Pro DC 2024在PDF编辑方面表现出色。用户…

JavaScript初级——DOM增删改

1、 document.createElement&#xff08;&#xff09; —— 可以用于创建一个元素节点对象&#xff0c;他需要一个标签名作为参数&#xff0c;将会根据该标签名创建元素节点对象&#xff0c;并将创建好的对象作为返回值返回。 2、 document.createTextNode&#xff08;&#…