Python图像处理【3】Python图像处理库应用

news2024/12/25 10:23:49

Python图像处理库应用

    • 0. 前言
    • 1. 将 RGB 图像转换为灰度图像算法
      • 1.1 算法原理
      • 3.2 算法实现
    • 2. 使用 PIL 库计算图像差异
      • 2.1 算法原理
      • 2.2 算法实现
    • 3. 使用 Scikit-image 转换图像色彩空间
      • 3.1 将 RGB 图像转换至 HSV 色彩空间
      • 3.2 将 RGB 图像转换至 YUV 色彩空间
    • 4. 用 OpenCV 调整图像的大小
    • 5. 使用 Scikit-image 在图像中添加水印
    • 6. 使用线性变换改变图像的亮度/对比度
      • 6.1 算法原理
      • 6.2 算法实现
    • 小结
    • 系列链接

0. 前言

我们已经学习了使用多种不同的 Python 库实现常见的图像处理,但这些库只是 Python 丰富第三方库的冰山一角,在本节中,我们将继续探索更多 Python 图像处理库处理图像分析问题。

1. 将 RGB 图像转换为灰度图像算法

在本节中,我们将学习实现六种不同的算法,以将 RGB 彩色图像(具有 RGB 三个颜色通道的图像)转换为灰度图像。我们首先介绍不同算法的原理,然后在 rgb2gray() 函数中实现这些算法。

1.1 算法原理

首先,介绍多种不同的强度 (intensity) 算法,将 RGB 转换为灰度图像的最简单方法是计算三个颜色通道的平均值:
V = ( R + G + B ) / 3 V = (R+G+B)/3 V=(R+G+B)/3
或者通过使用 RGB 通道的加权组合来与人类的亮度感知相匹配,加权计算公式如下:
V = 0.3 R + 0.59 G + 0.11 B V = 0.3R+0.59G+0.11B V=0.3R+0.59G+0.11B

我们也可以通过获取 RGB 通道的最大值来计算最终的灰度值:
V = m a x ( R , G , B ) V = max(R, G, B) V=max(R,G,B)
我们也可以通过亮度 (luster )来获取最终灰度强度值,其中亮度是色调、亮度和饱和度 (HLS) 颜色空间中的L通道,亮度是 RGB 中最小和最大通道值的平均值:
V = ( m a x ( R , G , B ) + m i n ( R , G , B ) ) / 2 V = (max(R,G,B) + min(R,G,B))/2 V=(max(R,G,B)+min(R,G,B))/2
或者,我们可以使用 Lab 色彩空间的 L 通道,将图像从 RGB 空间转换为 Lab 颜色空间,并提取 L (强度)通道值。
最后,我们也可以使用 RGB 色彩空间的 R 通道,即从 RGB 图像中提取红色通道,等效的,我们也可以提取 GB 通道。

3.2 算法实现

首先,导入所需的库并定义 rgb2gray() 函数,使用该函数实现上述六种计算灰度图像的算法,并返回每种算法的输出灰度图像:

import numpy as np
from skimage.color import rgb2lab
from skimage.io import imread
import matplotlib.pyplot as plt

def rgb2gray(img):
    gray_images = {}
    gray_images['intensity'] = np.mean(image, axis=2)
    gray_images['luminance'] = np.average(image, axis=2, weights=[0.3, 0.59, 0.11])
    gray_images['value'] = np.max(image, axis=2)
    gray_images['luster'] = (np.max(image, axis=2) + np.min(image, axis=2)) / 2
    gray_images['Lab L'] = rgb2lab(img)[...,0]
    gray_images['RGB R'] = img[...,0]
    return gray_images

读取并绘制原始图像:

image = imread('1.png')
plt.figure(figsize=(5,5))
plt.imshow(image), plt.axis('off'), plt.title('RGB image', size=10)
plt.show()

RGB图像
调用函数 rgb2gray(),绘制不同算法生成的灰度图像:

gray_images = rgb2gray(image)
i = 1
plt.figure(figsize=(15,10))
plt.gray()
for gray_type in sorted(gray_images):
    plt.subplot(2,3,i), plt.imshow(gray_images[gray_type]), plt.axis('off'), plt.title(gray_type, size=10)
    i += 1
plt.suptitle('Conerting RGB to GrayScale image with different methods', size=25)
plt.show()

灰度图像

2. 使用 PIL 库计算图像差异

图像差异的相关研究一直受到业界的广泛关注,其具有极大的研究价值,旨在从相似的图像对中定位差异目标。

2.1 算法原理

在实践中,我们通常需要计算两个仅略有不同的图像之间的差异,例如,实现视频压缩的一种方法是存储一帧以及其他帧与该帧的差异,而不是存储所有帧,如果视频帧之间仅略有不同,则该技术可以实现较高的压缩比,从而节省存储空间,或者我们可以利用两张图像之间的差异来得到目标对象的图像。在本节中,我们将学习如何使用 PIL 库函数 difference() 来计算两个图像的差异图像。

2.2 算法实现

首先,导入所需的模块,包括 PIL 模块中的 Image 类用于加载/保存图像以及计算图像差异所需的 difference() 函数和用于图像可视化的 matplotlit 库中 pyplot 模块,模块加载完成后使用 Image 模块中的 open() 函数读取两张输入图像。要计算图像间的差异,两张输入图像的尺寸大小必须相同,为了提高程序的鲁棒性,我们可以使用 resize() 函数调整第二幅图像的尺寸大小,使其与第一幅图像尺寸大小相同,加载完成后可以使用 Image.show() 函数查看加载完成的输入图像:

from PIL.ImageChops import difference
from PIL import Image
from matplotlib import pyplot as plt

# 加载两张图像
im1 = Image.open("1.png")
im2 = Image.open("2.png").resize((im1.width, im1.height))

plt.figure(figsize=(20,20))
plt.subplot(121),plt.imshow(im1),plt.title('image1')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(im2),plt.title('image2')
plt.xticks([]), plt.yticks([])
plt.show()

原始图像
要计算第二幅图像与第一幅图像之间的差异,可以使用 PIL ImageChop 模块的 difference() 函数计算两个图像的差异图像,最后使用 Image 模块中的 save() 函数保存差异图像:

# 计算两张图像的差异,并将差异图像保存在本地文件系统中
difference(im2, im1).show()
difference(im2, im1).save('D1.png')

图像差异

3. 使用 Scikit-image 转换图像色彩空间

将图像从一个颜色空间转换为另一个颜色空间是一种非常有用的操作,在多种不同应用程序中都有着重要作用,例如图像分割等。

3.1 将 RGB 图像转换至 HSV 色彩空间

在本节中,我们将介绍以下内容,使用 Scikit-Image.Color 模块的 RGB2HSV()HSV2RGB() 函数将彩色图像从 RGB 转换为 HSV 色彩空间,我们还将研究修改 H(hue)S(saturation)V(value) 通道中的值对图像的影响。接下来,我们实现将图像从 RGB 色彩空间转换到 HSV 颜色空间,并返回转换后的图像。

(1) 首先导入所需的库、模块和函数,然后读取输入 RGB 彩色图像:

from skimage.io import imread
from skimage.color import rgb2hsv, hsv2rgb
import numpy as np
import matplotlib.pyplot as plt

(2) 使用 skimage.rgb2hsv() 函数将其转换为 HSV 色彩空间,并且使用 Numpyclip() 函数来确保输出像素值在 [0,1] 区间内:

im = imread("1.png")
im_hsv = np.clip(rgb2hsv(im), 0, 1)

绘制原始输入图像,以及转换后图像的 HSV 通道。然后,分别更改图像的 HSV 通道,修改后将图像转换回 RGB 色彩空间,以查看修改通道像素值对输出图像的影响。

(3) 使用 Matplotlib 的函数 subplots_adjust() 可以调整子图之间的边距,例如,通过指定子图之间的水平和垂直间距来使图像展示更为紧凑:

plt.figure(figsize=(20,12))
plt.subplots_adjust(0,0,1,0.925,0.05,0.05)
plt.gray()
plt.subplot(231), plt.imshow(im_hsv[...,0]), plt.title('h', size=10), plt.axis('off')
plt.subplot(232), plt.imshow(im_hsv[...,1]), plt.title('s', size=10), plt.axis('off')
plt.subplot(233), plt.imshow(im_hsv[...,2]), plt.title('v', size=10), plt.axis('off')
im_hsv_copy = np.copy(im_hsv)
im_hsv[...,0] /= 4
plt.subplot(234), plt.imshow(np.clip(hsv2rgb(im_hsv), 0, 1)), plt.title('original image with h=h/4', size=10), plt.axis('off')
im_hsv = im_hsv_copy
im_hsv[...,1] /= 3
plt.subplot(235), plt.imshow(np.clip(hsv2rgb(im_hsv), 0, 1)), plt.title('original image with s=s/3', size=10), plt.axis('off')
im_hsv = im_hsv_copy
im_hsv[...,2] /= 5
plt.subplot(236), plt.imshow(np.clip(hsv2rgb(im_hsv), 0, 1)), plt.title('original image with v=v/5', size=10), plt.axis('off')
plt.show()

HSV色彩空间

3.2 将 RGB 图像转换至 YUV 色彩空间

接下来,我们将介绍另一个颜色模型 YUV,其中通道 Y 代表亮度 (brightness),uv 通道表示色彩 (color)。我们将实现使用 color 模块函数将彩色图像从 RGB 空间转换为 YUV 颜色空间。

(1) 首先导入相应库中的必需函数,然后读取 RGB 输入图像,并使用 skimage.ColorRGB2YUV() 函数将其转换为 YUV 图像:

from skimage.color import rgb2yuv, yuv2rgb
im = imread("2.png")
im_Yuv = rgb2yuv(im)

(2) 分别绘制 YUV 图像中的亮度 (y) 和色彩通道 (u, v),然后修改 YUV 色彩空间中每个通道的值,再使用 skimage.color.yuv2rgb() 函数将图像转换回 RGB 色彩空间,观察修改不同通道对图像的影响:

plt.figure(figsize=(20,15))
plt.subplots_adjust(0,0,1,0.925,0.05,0.05)
plt.gray()
plt.subplot(231), plt.imshow(im_Yuv[...,0]), plt.title('Y', size=10), plt.axis('off')
plt.subplot(232), plt.imshow(im_Yuv[...,1]), plt.title('u', size=10), plt.axis('off')
plt.subplot(233), plt.imshow(im_Yuv[...,2]), plt.title('v', size=10), plt.axis('off')
im_Yuv_copy = np.copy(im_Yuv)
im_Yuv[...,0] /= 2
plt.subplot(234), plt.imshow(np.clip(yuv2rgb(im_Yuv),0,1)), plt.title('original image with Y=Y/2', size=10), plt.axis('off')
im_Yuv = im_Yuv_copy
im_Yuv[...,1] /= 3
plt.subplot(235), plt.imshow(np.clip(yuv2rgb(im_Yuv),0,1)), plt.title('original image with u=u/3', size=10), plt.axis('off')
im_Yuv = im_Yuv_copy
im_Yuv[...,2] /= 4
plt.subplot(236), plt.imshow(np.clip(yuv2rgb(im_Yuv),0,1)), plt.title('original image with v=v/4', size=10), plt.axis('off')
plt.show()

YUV色彩空间
从上图可以看出,降低 Y 通道值会降低图像的亮度(不会改变颜色),而更改 UV通道会改变图像颜色。

4. 用 OpenCV 调整图像的大小

本节我们介绍使用 OpenCV 和多种插值技术来调整图像大小,cv2.resize() 函数可以用于调整图像大小:

cv2.resize(src, dsize, fx, fy, interpolation)

OpenCV 中常用的插值标志 interpolation 包括:cv2.INTER_NEARESTcv2.INTER_LINEARcv2.INTER_AREAcv2.INTER_LANCZOS4cv2.INTER_CUBIC
当我们缩放图像时,为避免混叠图像伪影需要使用插值技术。不同的插值技术对图像的平滑度具有不同的影响。接下来,我们通过使用不同的插值技术将图像放大四倍(沿垂直和水平尺寸均放大四倍),从而观察使用不同插值技术对图像缩放的影响。

(1) 首先导入所需的库。读取输入图像,指定我们将使用的插值算法:

import cv2
import matplotlib.pylab as plt
im = cv2.imread("1.png") 
interps = ['nearest', 'bilinear', 'area', 'lanczos', 'bicubic']

(2) 用每种插值算法调整原始图像(将图像放大 4 倍),并绘制每种插值情况下获得的输出图像:

i = 1
plt.figure(figsize=(18,12))
for interp in [cv2.INTER_NEAREST, cv2.INTER_LINEAR, cv2.INTER_AREA, cv2.INTER_LANCZOS4, cv2.INTER_CUBIC]:
    im1 = cv2.resize(im, None, fx=8., fy=8., interpolation = interp) # 4 times
    plt.subplot(2,3,i)
    plt.imshow(cv2.cvtColor(im1, cv2.COLOR_BGR2RGB))
    plt.axis('off')
    plt.title(interps[i-1], size=20)
    i += 1
print(im.shape, im1.shape)
plt.show()

图像缩放

5. 使用 Scikit-image 在图像中添加水印

在图像中添加版权信息的一种常见方法是在图中添加一个 logo 图像作为水印。在本节中,我们将学习如何将 logo 图像添加到图像中。

(1) 加载所需的库。使用 imread() 函数从磁盘中读取原始图像和 logo 图像:

from skimage.color import rgb2gray, gray2rgb
import numpy as np
import matplotlib.pylab as plt

img1 = imread('1.png').astype(np.uint8)
img2 = imread('logo.jpg').astype(np.uint8)

(2) 使用 skimage.colorrgb2gray() 函数将 logo 图像转换为灰度,然后应用阈值算法。将 logo 图像用作掩码图像,然后使用感兴趣区域作为要插入 logo 的位置:

rows, cols, _ = img2.shape
roi = img1[0:rows, 0:cols]
img2gray = (255*rgb2gray(img2)).astype(np.uint8)
mask = 255*(img2gray < 150)		# cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = np.invert(mask)		# cv2.bitwise_not(mask)
mask_inv = mask_inv.astype(np.uint8)
img1_bg = np.bitwise_and(roi, gray2rgb(mask_inv))	# cv2.bitwise_and(roi,roi,mask = mask_inv)
img2_fg = np.bitwise_and(img2, gray2rgb(mask))		# cv2.bitwise_and(img2,img2,mask = mask)

(3) 最后,对前景图像和背景图像求和以获取修改后的感兴趣区域,并将其分配给原始图像中相应位置以获取水印图像:

dst = img1_bg + img2_fg
img1[0:rows, 0:cols ] = dst
plt.figure(figsize=(20,20))
plt.imshow(img1)
plt.axis('off')
plt.show()

添加图像水印

6. 使用线性变换改变图像的亮度/对比度

对比度、亮度增强技术是两种非常常见技术,这些技术是在许多图像处理任务(例如,图像分类)中使用预处理步骤。在本节中,我们将学习如何使用 OpenCV 库来修改图像的对比度和亮度。

6.1 算法原理

乘法和加法是两种常用的图像操作运算,使用这两种运算可以组成基本线性变换: g ( x ) = α f ( x ) + β g(x)=αf(x)+β g(x)=αf(x)+β,其中常数参数 α > 0 α>0 α>0 β β β 通常分别称为对比度(增益)和亮度(偏置)参数。可以将 f ( x ) f(x) f(x) 视为源图像像素,而 g ( x ) g(x) g(x) 则是输出图像像素,因此,我们可以将表达式改写为 g ( i , j ) = α ⋅ f ( i , j ) + β g(i,j)=α·f(i,j)+β g(i,j)=αf(i,j)+β,其中 i i i j j j 表示像素位于第 i i i 行和第 j j j 列中。在本节中,我们将学习如何使用 OpenCVconvertscaleabs() 实现基本线性变换,并观察其对图像的影响,该函数用法如下:

cv2.convertScaleAbs(src, alpha, beta)

在输入图像的每个通道上,该函数顺序执行三个操作,缩放,计算绝对值,转换为无符号的 8 位类型(对于输入图像 s r c src src,返回的输出图像是 s r c ∗ a l p h a + b e t a src*alpha+beta srcalpha+beta)。
幂转换也称为 gamma 校正,当 γ > 1 γ>1 γ>1 时图像将转移到频谱的黑色端,而在 γ < 1 γ<1 γ<1 时会使图像显得偏淡,使用 LUT() 函数可以将图像的查找表更改为具有幂转换的新图像,该用法函数如下:

cv2.LUT(src, lut)

6.2 算法实现

(1) 首先导入所需的库和函数,并加载输出图像,然后使用 OpenCV 函数定义函数 basic_linear_transform()gamma_correction() 分别实现对比度修改和伽马校正:

import cv2
import numpy as np
import matplotlib.pylab as plt

alpha, beta, gamma = 1, 0, 1

def basic_linear_transform(img, alpha, beta):
    return cv2.convertScaleAbs(img, alpha=alpha, beta=beta)

def gamma_correction(img, gamma):
    lookup_table = np.empty((1,256), np.uint8)
    for i in range(256):
        lookup_table[0,i] = np.clip(pow(i / 255.0, gamma) * 255.0, 0, 255)
    return cv2.LUT(img, lookup_table)

image = cv2.imread('1.png')

(2) 用不同的 alphagamma 值调用函数 basic_linear_transform() 以改变输入图像的亮度,并绘制输出图像:

plt.figure(figsize=(20,20))
i = 1
for alpha in [0.25, 0.5, 1, 1.5, 2.5]:
    for beta in [0, 0.5, 1, 1.5, 2]:
        image_corrected = basic_linear_transform(image, alpha, beta)
        plt.subplot(5,5,i), plt.imshow(cv2.cvtColor(image_corrected, cv2.COLOR_BGR2RGB)), plt.axis('off')
        plt.title(r'$\alpha$={:.2f}, $\beta$={:.2f}'.format(alpha, beta), size=10)
        i += 1
plt.suptitle('Basic linear transform to change brightness', size=20)
plt.show()

亮度增强

(3) 用不同的 gamma 参数值调用函数 gamma_correction(),并绘制输出图像:

plt.figure(figsize=(20,20))
i = 1
for gamma in np.linspace(0, 2, 16):
    image_gamma_corrected = gamma_correction(image, gamma)
    plt.subplot(4,4,i), plt.imshow(cv2.cvtColor(image_gamma_corrected, cv2.COLOR_BGR2RGB)), plt.axis('off')
    plt.title(r'$\gamma$={:.2f}'.format(gamma), size=10)
    i += 1
plt.suptitle('Gamma correction', size=20)
plt.show()

对比度增强

小结

在本节中,我们介绍了多个用于图像处理的流行 Python 第三方库,利用这些图像处理库我们可以快速执行基本的图像变换操作。本节我们重点介绍多种可以将 RGB 图像转换为灰度图像算法、介绍了如何使用 PIL 库计算图像间的差异、使用 Scikit-image 转换图像色彩空间以及在图像中添加水印、同时介绍了如何使用 OpenCV 库指定不同的插值算法调整图像大小、最后我们还介绍了如何利用线性变换改变图像的亮度/对比度。

系列链接

Python图像处理【1】图像与视频处理
Python图像处理【2】探索Python图像处理库

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

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

相关文章

html学习笔记

1.在idea里右键创建html文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body></body> </html>在谷歌浏览器中输入chrome://version可以看…

【学习笔记】深度学习入门:基于Python的理论与实现-误差反向传播法

CONTENTS五、误差反向传播法5.1 计算图5.2 链式法则5.3 反向传播5.4 简单层的实现5.5 激活函数层的实现5.6 Affine/Softmax层的实现5.7 误差反向传播法的实现五、误差反向传播法 5.1 计算图 先引入一个很简单的问题&#xff1a;在超市买了222个100100100元一个的苹果&#xf…

[附源码]JAVA毕业设计个人饮食营养管理信息系统(系统+LW)

[附源码]JAVA毕业设计个人饮食营养管理信息系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 …

云原生|kubernetes|kubernetes集群使用私有镜像仓库拉取镜像(harbor或者官方的registry私有镜像仓库)

前言&#xff1a; 在实际的生产中&#xff0c;我们可能会有许多的由开发制作的docker镜像&#xff0c;这也就造成使用这些镜像需要打包成tar文件&#xff0c;然后上传到服务器内然后在导入并使用&#xff0c;但&#xff0c;kubernetes节点很多&#xff0c;有时候并不是明确的要…

13.前端笔记-CSS-盒子样式应用(圆角、阴影)

1、圆角边框 border-radius属性&#xff0c;用于设置元素的外边框圆角 原理&#xff1a;(椭)圆和矩形的两条边相切&#xff08;圆的半径就是length&#xff09;&#xff0c;形成圆角效果 属性&#xff1a; border-top-left-radius;左上 border-top-right-radius:右上 border…

B-神经网络模型复杂度分析

B-神经网络模型复杂度分析 前言一&#xff0c;模型计算量分析 卷积层 FLOPs 计算全连接层的 FLOPs 计算二&#xff0c;模型参数量分析 卷积层参数量BN 层参数量全连接层参数量三&#xff0c;模型内存访问代价计算 卷积层 MAC 计算四&#xff0c;一些概念 双精度、单精度和半精…

数苹果-第12届蓝桥杯Scratch选拔赛真题精选

[导读]&#xff1a;超平老师计划推出Scratch蓝桥杯真题解析100讲&#xff0c;这是超平老师解读Scratch蓝桥真题系列的第91讲。 蓝桥杯选拔赛每一届都要举行4~5次&#xff0c;和省赛、国赛相比&#xff0c;题目要简单不少&#xff0c;再加上篇幅有限&#xff0c;因此我精挑细选…

【Android】Fragment使用

使用Fragment 我们可以把页面结构划分成几块&#xff0c;每块使用一个Fragment来管理。这样我们可以更加方便的在运行过程中动态地更新Activity中的用户界面&#xff0c;日后迭代更新、维护也是更加方便。 Fragment并不能单独使用&#xff0c;他需要嵌套在Activity 中使用&…

Redis最佳实践(上)

引言 尽管 redis 是一款非常优秀的 NoSQL 数据库&#xff0c;但更重要的是&#xff0c;作为使用者我们应该学会在不同的场景中如何更好的使用它&#xff0c;更大的发挥它的价值。主要可以从这四个方面进行优化&#xff1a;Redis键值设计、批处理优化、服务端优化、集群配置优化…

某些设置由你的组织来管理

今天莫名其妙Windows更新出现&#xff1a;*某些设置由你的组织来管理 我们来看看如何恢复吧。 根据上面的图片我们可以知道&#xff0c; 可查看配置的更新策略&#xff1a; 可以看到设备设置的策略有下面几个&#xff1a; 解决方案 这个时候我们就要进入设置更改那些策略即…

Java企业微信对接(二)微信端回调到企业端

准备工作 先下载demo 下载完成后的目录,把这些类之间copy到工程里面就行,都是封装好的加密算法 回调配置 什么时候需要回调 在集成企业微信与内部系统时,我们往往需要搭建一个回调服务。回调服务,可以实现: 自定义丰富的服务行为。比如,用户向应用发消息时,识别消…

RNA-seq 详细教程:count 数据探索(4)

学习目标 了解 RNA-seq count 数据的特征比较 count 数据的不同数学模型确定最适合 RNA-seq count 数据的模型了解设置生物学重复对于鉴定样本间差异的好处1. 计数矩阵 当开始差异表达基因分析时&#xff0c;先从一个矩阵开始&#xff0c;该矩阵总结了数据集每个样本中的基因水…

ZMQ请求应答模式之无中间件的可靠性--自由者模式

一、引言 我们讲了那么多关于中间件的示例&#xff0c;好像有些违背“ZMQ是无中间件”的说法。但要知道在现实生活中&#xff0c;中间件一直是让人又爱又恨的东西。实践中的很多消息架构能都在使用中间件进行分布式架构的搭建&#xff0c;所以说最终的决定还是需要你自己去权衡…

3.8、集线器与交换机的区别

1、早期总线型以太网 最初使用粗同轴电缆作为传输媒体&#xff0c;后来是用相对便宜的细同轴电缆 普遍认为有源器件不可靠&#xff0c;无缘的电缆线最可靠&#xff08;并没有那么可靠&#xff09; 2、只用双绞线和集线器 HUB 的星型以太网 主机中的以太网卡及集线器个接口使…

Old money风盛行,柯罗芭KLOVA演绎中式奢华

Ralph Lauren先生说过&#xff1a;“奢侈是一种感性的生活方式。它和本季推出什么新品无关。它更关乎个人风格和舒适、轻松的环境。奢侈品是质量和永恒的优雅”。Ralph lauren以一己之力托起Old money风格的半壁江山&#xff0c;它属于带着一丝上流社会的雅痞绅士&#xff0c;优…

一起学时序分析之建立/保持时间裕量

何为裕量&#xff1f; 裕量&#xff0c;英文名称叫做“Slack”。我们在Vivado实现后的报告中常常能看到这样一栏&#xff1a; 因为都是缩写&#xff0c;所以我们来解释一下前四栏的含义&#xff1a; WNS&#xff0c;即Worst Negative Slack&#xff0c;最差负时序裕量。这个表…

leetcode:1579. 保证图可完全遍历【并查集思路】

目录题目截图题目分析ac code总结题目截图 题目分析 从删除比较难&#xff0c;考虑增加增加的过程中无用的边就可以删除考虑alice和bob各自的联通分量最后希望都是1&#xff0c;一开始都是n如果将两个独立的联通分量连起来了&#xff0c;那么连通分量个数减1这里很明显就是用并…

kubernetes-Pod详解2

kubernetes-Pod详解2 文章目录kubernetes-Pod详解2Pod生命周期创建和终止pod的创建过程pod的终止过程初始化容器钩子函数容器探测方式一&#xff1a;Exec方式二&#xff1a;TCPSocket方式三&#xff1a;HTTPGet重启策略Pod调度定向调度NodeSelector亲和性调度NodeAffinityPodAf…

Kamiya丨Kamiya艾美捷AREG酶联免疫吸附试验原理

Kamiya艾美捷AREG酶联免疫吸附试验预期用途&#xff1a; 该试剂盒是一种用于体外定量测量大鼠AREG的夹心酶免疫测定法血清、血浆和其他生物流体。仅供研究使用。不用于诊断程序。 存储&#xff1a; 所有试剂应按照小瓶上的标签保存。校准器、检测试剂A、检测试剂B和96孔带板应…

ZMQ之高可靠对称节点--双子星模式

一、概览 双子星模式是一对具有主从机制的高可靠节点。任一时间&#xff0c;某个节点会充当主机&#xff0c;接收所有客户端的请求&#xff1b;另一个则作为一种备机存在。两个节点会互相监控对方&#xff0c;当主机从网络中消失时&#xff0c;备机会替代主机的位置。 双子星模…