怎么创建一个论坛/济南百度推广优化
文章目录
- 1.图像的 IO 操作
- 1.1 图像读取 imread
- 1.2 图像显示
- 1.2.1 opencv 方式
- 1.2.2 matplotlib 方式
- 1.3 图像保存 imwrite
- 2.绘制几何图形
- 1. 绘制直线
- 2. 绘制矩形
- 3. 绘制圆形
- 4. 绘制多边形
- 5. 添加文字
- 3.获取并修改图像中的像素点
- 3.1 获取像素值
- 3.2 修改像素值
- 3.3 获取和修改区域像素值
- 4.获取图像属性
- 4.1 获取图像属性
- 详细解释
- 4.2 处理灰度图像
- 5.图像通道的拆分与合并
- 5.1 图像通道的拆分
- 5.2 图像通道的合并
- 5.3 修改单个通道并合并
- 6.色彩空间的改变
- 详细解释
- 为什么需要将 HSV 和 Lab 图像,先转换回 RGB 格式再显示?
- 1. `matplotlib` 期望的颜色格式是 RGB
- 2. 可视化的直观性
- 3. 避免误解
1.图像的 IO 操作
1.1 图像读取 imread
使用cv2.imread
函数可以读取图像。该函数有两个参数:
- 第一个参数是
图像文件的路径
。 - 第二个参数是
读取模式
,可以是以下几种:cv2.IMREAD_COLOR
:读取彩色图像(默认)。cv2.IMREAD_GRAYSCALE
:读取灰度图像。cv2.IMREAD_UNCHANGED
:读取图像,并包括图像的alpha通道。
示例
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt# 1.读取图像
# 读取彩色图像
image = cv.imread('../images/iu.jpg', cv.IMREAD_COLOR)# 读取灰度图像
image_gray = cv.imread('../images/iu.jpg', cv.IMREAD_GRAYSCALE)
1.2 图像显示
图像显示主要有两种方式:OpenCV
提供的 imshow 函数和 matplotlib
库提供的 imshow 函数。
1.2.1 opencv 方式
使用 cv2.imshow
函数可以显示图像。该函数有两个参数:
- 第一个参数是窗口的名称。
- 第二个参数是要显示的图像。
使用 cv2.waitKey
函数可以等待按键事件。该函数的参数是等待的时间(毫秒),如果设置为0,则无限等待。
使用cv2.destroyAllWindows
函数可以关闭所有窗口。
示例
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt# 1.读取图像# 读取彩色图像
image = cv.imread('../images/iu.jpg', cv.IMREAD_COLOR)# 读取灰度图像
image_gray = cv.imread('../images/iu.jpg', cv.IMREAD_GRAYSCALE)# 2.显示图像
# 2.1 opencv 显示
cv.imshow('iu', image)
cv.imshow('gray', image_gray)
cv.waitKey(0)
cv.destroyAllWindows()
但是由于使用 opencv 提供的 imshow 函数时会创建新的窗口显示图像,不方便观察,所以后面一般会用另外一种方式。
1.2.2 matplotlib 方式
转换颜色空间
由于OpenCV
读取的图像是 BGR
格式,而 matplotlib
显示图像时使用的是 RGB
格式。因此,需要将 BGR 图像转换为 RGB 图像,此时也是有两种方式:
- 使用
cvtColor
进行转换;
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(image_rgb)
- 使用
矩阵
转换;
plt.imshow(image[:,:,::-1])
示例
第一种方式
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt# 1.读取图像# 读取彩色图像
image = cv.imread('../images/iu.jpg', cv.IMREAD_COLOR)# 读取灰度图像
image_gray = cv.imread('../images/iu.jpg', cv.IMREAD_GRAYSCALE)# 2.2 plt 读取# 第一种方式
image_rgb = cv.cvtColor(image, cv.COLOR_BGR2RGB)# 彩色图像显示
plt.imshow(image_rgb)
plt.show()
第二种方式
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt# 1.读取图像# 读取彩色图像
image = cv.imread('../images/iu.jpg', cv.IMREAD_COLOR)# 读取灰度图像
image_gray = cv.imread('../images/iu.jpg', cv.IMREAD_GRAYSCALE)# 2.2 plt 读取# 第二种方式
plt.imshow(image[:,:,::-1]) # 彩色图像显示
plt.show()
1.3 图像保存 imwrite
使用 cv2.imwrite
函数可以保存图像。该函数有两个参数:
- 第一个参数是保存的文件路径。
- 第二个参数是要保存的图像。
示例
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt# 1.读取图像# 读取彩色图像
image = cv.imread('../images/iu.jpg', cv.IMREAD_COLOR)# 读取灰度图像
image_gray = cv.imread('../images/iu.jpg', cv.IMREAD_GRAYSCALE)# 2.显示图像
# 2.1 opencv 读取
# cv.imshow('iu', image)
# cv.imshow('gray', image_gray)
# cv.waitKey(0)
# cv.destroyAllWindows()# 2.2 plt 读取# 第一种方式
# image_rgb = cv.cvtColor(image, cv.COLOR_BGR2RGB)# 彩色图像读取
# plt.imshow(image_rgb)# 第二种方式
# plt.imshow(image[:,:,::-1]) # 彩色图像读取
# plt.show()# 3.图像保存
cv.imwrite('../images/iu_rgb.jpg', image)
cv.imwrite('../images/iu_gray.jpg', image_gray)
2.绘制几何图形
在OpenCV中,可以使用一系列绘图函数在图像上绘制几何图形和添加文字。这些函数包括绘制直线、矩形、圆形、多边形以及添加文本等。以下是如何使用这些函数的详细步骤和示例代码。
1. 绘制直线
使用 cv2.line
函数可以在图像上绘制直线。该函数的参数包括:
- 图像对象
- 起点坐标
- 终点坐标
- 颜色(BGR格式)
- 线条粗细(可选)
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt# 创建一个空白图像
image = np.zeros((512, 512, 3), np.uint8)# 绘制一条白色直线
cv.line(image, (0, 0), (511, 511), (255, 255, 255), 5)# 显示图像
plt.imshow(image[:,:,::-1])
plt.show()
2. 绘制矩形
使用 cv2.rectangle
函数可以在图像上绘制矩形。该函数的参数包括:
- 图像对象
- 左上角坐标
- 右下角坐标
- 颜色(BGR格式)
- 线条粗细(如果为负值,则填充矩形)
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt# 创建一个空白图像
image = np.zeros((512, 512, 3), np.uint8)# 绘制一条白色直线
cv.line(image, (0, 0), (511, 511), (255, 255, 255), 5)# 绘制一个绿色矩形
cv.rectangle(image, (100, 100), (400, 400), (0, 255, 0), 3)# 显示图像
plt.imshow(image[:,:,::-1])
plt.show()
3. 绘制圆形
使用 cv2.circle
函数可以在图像上绘制圆形。该函数的参数包括:
- 图像对象
- 圆心坐标
- 半径
- 颜色(BGR格式)
- 线条粗细(如果为负值,则填充圆形)
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt# 创建一个空白图像
image = np.zeros((512, 512, 3), np.uint8)# 绘制一条白色直线
cv.line(image, (0, 0), (511, 511), (255, 255, 255), 5)# 绘制一个绿色矩形
cv.rectangle(image, (100, 100), (400, 400), (0, 255, 0), 3)# 绘制一个红色圆形
cv.circle(image, (256, 256), 100, (0, 0, 255), -1)# 显示图像
plt.imshow(image[:,:,::-1])
plt.show()
4. 绘制多边形
使用 cv2.polylines
函数可以在图像上绘制多边形。该函数的参数包括:
- 图像对象
- 顶点坐标数组
- 是否闭合
- 颜色(BGR格式)
- 线条粗细
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt# 创建一个空白图像
image = np.zeros((512, 512, 3), np.uint8)# 绘制一条白色直线
cv.line(image, (0, 0), (511, 511), (255, 255, 255), 5)# 绘制一个绿色矩形
cv.rectangle(image, (100, 100), (400, 400), (0, 255, 0), 3)# 绘制一个红色圆形
cv.circle(image, (256, 256), 100, (0, 0, 255), -1)# 定义多边形的顶点
points = np.array([[100, 50], [200, 300], [70, 200], [50, 100]], np.int32)
points = points.reshape((-1, 1, 2))# 绘制一个蓝色多边形
cv.polylines(image, [points], True, (255, 0, 0), 3)
# 显示图像
plt.imshow(image[:,:,::-1])
plt.show()
5. 添加文字
使用 cv2.putText
函数可以在图像上添加文字。该函数的参数包括:
- 图像对象
- 文字内容
- 文字起点坐标
- 字体类型
- 字体大小
- 颜色(BGR格式)
- 线条粗细
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt# 创建一个空白图像
image = np.zeros((512, 512, 3), np.uint8)# 绘制一条白色直线
cv.line(image, (0, 0), (511, 511), (255, 255, 255), 5)# 绘制一个绿色矩形
cv.rectangle(image, (100, 100), (400, 400), (0, 255, 0), 3)# 绘制一个红色圆形
cv.circle(image, (256, 256), 100, (0, 0, 255), -1)# 定义多边形的顶点
points = np.array([[100, 50], [200, 300], [70, 200], [50, 100]], np.int32)
points = points.reshape((-1, 1, 2))# 绘制一个蓝色多边形
cv.polylines(image, [points], True, (255, 0, 0), 3)
# 显示图像# 添加白色文字
cv.putText(image, 'Hello, OpenCV!', (50, 250), cv.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)plt.imshow(image[:,:,::-1])
plt.show()
3.获取并修改图像中的像素点
在OpenCV中,可以非常方便地获取和修改图像中的像素点。图像在OpenCV中被表示为一个NumPy数组,因此可以使用NumPy的索引和切片操作来访问和修改图像的像素值。
3.1 获取像素值
要获取图像中某个像素点的值,可以使用数组索引。对于彩色图像,像素值是一个包含三个元素的数组,分别表示B、G、R三个通道的值。对于灰度图像,像素值是一个单一的灰度值。
示例
import cv2 as cv# 读取彩色图像
image = cv.imread('../images/iu.jpg')# 获取某个像素点的值 (x=100, y=100)
pixel_value = image[100, 100]
print("Pixel value at (100, 100):", pixel_value)# 获取某个像素点的蓝色通道值
blue_value = image[100, 100, 0]
print("Blue channel value at (100, 100):", blue_value)# 获取某个像素点的绿色通道值
green_value = image[100, 100, 1]
print("Green channel value at (100, 100):", green_value)# 获取某个像素点的红色通道值
red_value = image[100, 100, 2]
print("Red channel value at (100, 100):", red_value)
3.2 修改像素值
要修改图像中某个像素点的值,可以直接使用数组索引进行赋值操作。对于彩色图像,可以分别修改B、G、R三个通道的值。
示例
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt# 创建一个空白图像
image = np.zeros((512, 512, 3), np.uint8)# 修改某个像素点的值 (x=100, y=100)
image[100, 100] = [0, 255, 0] # 将该像素点设置为绿色# 修改某个像素点的蓝色通道值
image[100, 100, 0] = 255 # 将该像素点的蓝色通道值设置为255# 修改某个像素点的绿色通道值
image[100, 100, 1] = 0 # 将该像素点的绿色通道值设置为0# 修改某个像素点的红色通道值
image[100, 100, 2] = 0 # 将该像素点的红色通道值设置为0# 显示修改后的图像
plt.imshow(image[:,:,::-1])
plt.show()
3.3 获取和修改区域像素值
除了单个像素点,还可以获取和修改图像的某个区域。可以使用NumPy
的切片操作来实现。
示例
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt# 创建一个空白图像
image = np.zeros((512, 512, 3), np.uint8)# 获取某个区域的像素值 (从x=100, y=100到x=200, y=200)
region = image[100:200, 100:200]
print("Region shape:", region.shape)# 修改某个区域的像素值 (从x=100, y=100到x=200, y=200)
image[100:200, 100:200] = [0, 255, 0] # 将该区域设置为绿色# 显示修改后的图像
plt.imshow(image[:,:,::-1])
plt.show()
4.获取图像属性
在OpenCV中,可以通过读取图像的属性来获取图像的基本信息,例如图像的尺寸、通道数、数据类型等。这些属性可以帮助你了解图像的基本结构和格式,从而更好地进行图像处理和分析。
4.1 获取图像属性
以下是一些常用的图像属性及其获取方法:
- 图像的形状(尺寸):可以使用NumPy数组的
shape
属性来获取图像的尺寸。 - 图像的大小(像素数):可以使用NumPy数组的
size
属性来获取图像的总像素数。 - 图像的数据类型:可以使用NumPy数组的
dtype
属性来获取图像的数据类型。
示例
以下是一个示例代码,演示如何获取图像的这些属性:
import cv2 as cv# 读取图像
image = cv.imread('../images/iu.jpg')# 获取图像的形状(尺寸)
height, width, channels = image.shape
print("Height:", height)
print("Width:", width)
print("Channels:", channels)# 获取图像的大小(像素数)
size = image.size
print("Size (number of pixels):", size)# 获取图像的数据类型
dtype = image.dtype
print("Data type:", dtype)
详细解释
-
图像的形状(尺寸):
image.shape
返回一个包含三个元素的元组,分别表示图像的高度、宽度和通道数。- 对于灰度图像,
image.shape
返回的元组只有两个元素,分别表示图像的高度和宽度。
-
图像的大小(像素数):
image.size
返回图像的总像素数,即高度、宽度和通道数的乘积。
-
图像的数据类型:
image.dtype
返回图像的数据类型,通常是uint8
,表示每个像素值是一个8位无符号整数。
4.2 处理灰度图像
如果你处理的是灰度图像,获取属性的方式略有不同,因为灰度图像只有两个维度(高度和宽度)。
import cv2 as cv# 读取灰度图像
gray_image = cv.imread('example.jpg', cv.IMREAD_GRAYSCALE)# 获取图像的形状(尺寸)
height, width = gray_image.shape
print("Height:", height)
print("Width:", width)# 获取图像的大小(像素数)
size = gray_image.size
print("Size (number of pixels):", size)# 获取图像的数据类型
dtype = gray_image.dtype
print("Data type:", dtype)
5.图像通道的拆分与合并
在OpenCV中,可以使用 cv2.split
函数将彩色图像的通道拆分为单独的灰度图像,并使用 cv2.merge
函数将多个单通道图像合并为一个多通道图像。这些操作在图像处理和计算机视觉任务中非常常见和有用。
5.1 图像通道的拆分
cv2.split
函数可以将彩色图像的B、G、R三个通道拆分为三个单独的灰度图像。
示例
import cv2 as cv
import matplotlib.pyplot as plt# 读取彩色图像
image = cv.imread('../images/iu.jpg')# 拆分图像的B、G、R通道
b_channel, g_channel, r_channel = cv.split(image)# 将BGR图像转换为RGB图像
image_rgb = cv.cvtColor(image, cv.COLOR_BGR2RGB)# 显示原始图像和拆分后的通道图像
plt.figure(figsize=(10, 7))# 显示原始图像
plt.subplot(2, 2, 1)
plt.imshow(image_rgb)
plt.title('Original Image (RGB)')
plt.axis('off')# 显示蓝色通道
plt.subplot(2, 2, 2)
plt.imshow(b_channel, cmap='gray')
plt.title('Blue Channel')
plt.axis('off')# 显示绿色通道
plt.subplot(2, 2, 3)
plt.imshow(g_channel, cmap='gray')
plt.title('Green Channel')
plt.axis('off')# 显示红色通道
plt.subplot(2, 2, 4)
plt.imshow(r_channel, cmap='gray')
plt.title('Red Channel')
plt.axis('off')plt.show()
5.2 图像通道的合并
cv2.merge
函数可以将多个单通道图像合并为一个多通道图像。通常用于将拆分后的通道重新合并为一个彩色图像。
示例
import cv2 as cv
import matplotlib.pyplot as plt# 读取彩色图像
image = cv.imread('../images/iu.jpg')# 拆分图像的B、G、R通道
b_channel, g_channel, r_channel = cv.split(image)# 将BGR图像转换为RGB图像
image_rgb = cv.cvtColor(image, cv.COLOR_BGR2RGB)# 合并B、G、R通道
merged_image = cv.merge([b_channel, g_channel, r_channel])# 显示合并通道后的图像
plt.imshow(merged_image[:,:,::-1])
plt.show()
5.3 修改单个通道并合并
你还可以在拆分通道后对单个通道进行修改,然后再合并回去。例如,将图像的红色通道设置为零。
示例
import cv2 as cv
import matplotlib.pyplot as plt# 读取彩色图像
image = cv.imread('../images/iu.jpg')# 拆分图像的B、G、R通道
b_channel, g_channel, r_channel = cv.split(image)# 将BGR图像转换为RGB图像
image_rgb = cv.cvtColor(image, cv.COLOR_BGR2RGB)# # 将红色通道设置为零
# r_channel[:] = 0# 合并B、G、R通道
merged_image = cv.merge([b_channel, g_channel, r_channel])# 显示合并通道后的图像
plt.imshow(merged_image[:,:,::-1])
plt.show()
6.色彩空间的改变
在图像处理和计算机视觉中,改变色彩空间是一个常见的操作。OpenCV 提供了多种色彩空间转换函数
,可以方便地在不同色彩空间之间进行转换。常见的色彩空间包括 BGR
、RGB
、HSV
、Lab
等。
OpenCV 提供了 cv.cvtColor
函数来进行色彩空间的转换。以下是一些常见的色彩空间转换:
BGR
到RGB
:cv.COLOR_BGR2RGB
BGR
到灰度
:cv.COLOR_BGR2GRAY
BGR
到HSV
:cv.COLOR_BGR2HSV
BGR
到Lab
:cv.COLOR_BGR2Lab
示例
import cv2 as cv
import matplotlib.pyplot as plt# 读取彩色图像
image = cv.imread('../images/iu.jpg')# BGR 转 RGB
image_rgb = cv.cvtColor(image, cv.COLOR_BGR2RGB)# BGR 转 灰度
image_gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)# BGR 转 HSV
image_hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)# BGR 转 Lab
image_lab = cv.cvtColor(image, cv.COLOR_BGR2Lab)# 显示原始图像和转换后的图像
plt.figure(figsize=(12, 8))# 显示原始图像(BGR 转 RGB)
plt.subplot(2, 2, 1)
plt.imshow(image_rgb)
plt.title('Original Image (RGB)')
plt.axis('off')# 显示灰度图像
plt.subplot(2, 2, 2)
plt.imshow(image_gray, cmap='gray')
plt.title('Grayscale Image')
plt.axis('off')# 显示 HSV 图像
plt.subplot(2, 2, 3)
plt.imshow(image_hsv)
plt.title('HSV Image')
plt.axis('off')# 显示 Lab 图像
plt.subplot(2, 2, 4)
plt.imshow(image_lab)
plt.title('Lab Image')
plt.axis('off')plt.tight_layout()
plt.show()
详细解释
读取图像
使用 cv.imread 读取图像,默认情况下图像是以 BGR
顺序存储的。
色彩空间转换:
- 使用
cv.cvtColor
函数进行色彩空间转换。cv.COLOR_BGR2RGB
:将 BGR 转换为 RGB。cv.COLOR_BGR2GRAY
:将 BGR 转换为灰度。cv.COLOR_BGR2HSV
:将 BGR 转换为 HSV。cv.COLOR_BGR2Lab
:将 BGR 转换为 Lab。
显示图像
使用 plt.imshow 显示图像。对于彩色图像,确保颜色通道顺序正确(RGB)
。
- 对于灰度图像,使用
cmap='gray'
参数显示灰度图像。 - 对于
HSV
和Lab
图像,先转换回RGB
格式再显示。
为什么需要将 HSV 和 Lab 图像,先转换回 RGB 格式再显示?
在使用 matplotlib
显示图像时,特别是对于 HSV 和 Lab 色彩空间的图像,先转换回 RGB 格式再显示的原因主要有以下几点:
1. matplotlib
期望的颜色格式是 RGB
matplotlib
的 plt.imshow
函数默认期望输入的图像是 RGB 格式的。如果直接传入 HSV 或 Lab 格式的图像,颜色会显示不正确,因为 matplotlib
会将这些值误解为 RGB 值。
2. 可视化的直观性
HSV 和 Lab 色彩空间的值并不直接对应于人类视觉系统中的颜色感知。例如,HSV 色彩空间中的 H(色调)分量是一个角度值,S(饱和度)和 V(亮度)分量是比例值,而这些值在直接显示时并不能直观地反映出图像的颜色信息。将它们转换回 RGB 格式后,可以更直观地展示图像的颜色信息。
3. 避免误解
直接显示 HSV 或 Lab 图像可能会导致误解,因为这些色彩空间的值范围和含义与 RGB 不同。例如,HSV 色彩空间中的 H 分量范围是 [0, 179](在 OpenCV 中),而 RGB 的每个通道范围是 [0, 255]。直接显示这些图像会导致颜色失真和误解。
示例
以下是一个示例代码,演示如何将 HSV 和 Lab 图像转换回 RGB 格式再使用 matplotlib
显示:
import cv2 as cv
import matplotlib.pyplot as plt# 读取彩色图像
image = cv.imread('example.jpg')# BGR 转 HSV
image_hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)# BGR 转 Lab
image_lab = cv.cvtColor(image, cv.COLOR_BGR2Lab)# HSV 转 RGB
image_hsv_rgb = cv.cvtColor(image_hsv, cv.COLOR_HSV2RGB)# Lab 转 RGB
image_lab_rgb = cv.cvtColor(image_lab, cv.COLOR_Lab2RGB)# 显示原始图像和转换后的图像
plt.figure(figsize=(12, 8))# 显示原始图像(BGR 转 RGB)
image_rgb = cv.cvtColor(image, cv.COLOR_BGR2RGB)
plt.subplot(2, 2, 1)
plt.imshow(image_rgb)
plt.title('Original Image (RGB)')
plt.axis('off')# 显示 HSV 图像(转换回 RGB)
plt.subplot(2, 2, 2)
plt.imshow(image_hsv_rgb)
plt.title('HSV Image (Converted to RGB)')
plt.axis('off')# 显示 Lab 图像(转换回 RGB)
plt.subplot(2, 2, 3)
plt.imshow(image_lab_rgb)
plt.title('Lab Image (Converted to RGB)')
plt.axis('off')plt.tight_layout()
plt.show()
相关文章:

【OpenCV 图像处理 Python版】图像处理的基本操作
文章目录 1.图像的 IO 操作1.1 图像读取 imread1.2 图像显示1.2.1 opencv 方式1.2.2 matplotlib 方式 1.3 图像保存 imwrite 2.绘制几何图形1. 绘制直线2. 绘制矩形3. 绘制圆形4. 绘制多边形5. 添加文字 3.获取并修改图像中的像素点3.1 获取像素值3.2 修改像素值3.3 获取和修改…...

HarmonyOS应用开发学习经验
一、HarmonyOS学习官网 开发者能力认证 HarmonyOS应用开发者基础认证6月之前的学习资源官网已经关闭过期,大家不要慌,官方更新了最新资源,但是,对于之前没有学习完的学员不友好,存在知识断片的现象,建议官…...

LLM大语言模型应用方案之RAG检索增强生成的实现步骤。
0.我理解的RAG 什么是RAG? RAG的全称是“检索增强生成模型”(Retrieval-Augmented Generation)。这是一种特别聪明的大语言模型。 RAG是怎么工作的呢? 1.检索:当你问RAG一个问题时,它会先去“图书…...

【python学习】学习python的小项目
学习Python时,通过完成一些小项目可以帮助你巩固知识并提升实践能力。以下是一些适合学习Python的小项目建议: 命令行计算器: 创建一个简单的命令行计算器,可以执行基本的算术运算(加、减、乘、除)。使用i…...

java-冒泡排序 1
## Java中的冒泡排序 ### 1. 冒泡排序的基本概念 冒泡排序(Bubble Sort)是一种简单且直观的排序算法。它通过重复地遍历待排序的列表,比较相邻的元素并交换它们的位置,使较大的元素逐步从列表的一端移动到另一端,就像…...

【STM32】USART串口通讯
1.USART简介 STM32芯片具有多个USART外设用于串口通讯,它是 Universal Synchronous Asynchronous Receiver and Transmitter的缩写, 即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。有别于USART, 它还有具有UART外设(Univers…...

Qt6中如何将QList转为QSet?
QSet是一个具有唯一值的哈希集合。比较少用。比较有用的是QSet里面的intersect查找两个集合中不同元素,并合并。 转换过程比较简单,第一种是直接用迭代器。 QSet<int> set(list.begin(), list.end()); 第二种就是逐一遍历赋值: QLi…...

aspectj:AOP编程备忘录-切面定义的注意事项
AOP编程时定义切面时需要注意的事 Around 以Around注解拦截构造方法(Constructor)时切面定义只能用call方式而不能是execution,否则 ProceedingJoinPoint.proceed()返回的是null,得不到构造的实例。 execution execution切入点要修改对象内部&#x…...

大数据面试题之Hive(1)
目录 说下为什么要使用Hive?Hive的优缺点?Hive的作用是什么? 说下Hive是什么?跟数据仓库区别? Hive架构 Hive内部表和外部表的区别? 为什么内部表的删除,就会将数据全部删除,而外部表只删除表结构?为什么用外部表更好? Hive建表语句?创建表…...

【Git】分布式版本控制工具
一、简介 二、目标 Git分布式版本控制工具 一、简介 Git是一种分布式版本控制系统,用于跟踪和管理源代码的变化。它由林纳斯托瓦兹(Linus Torvalds)于2005年开发,并迅速成为最流行的版本控制工具之一。以下是关于Git的一些关键…...

排序之插入排序----直接插入排序和希尔排序(1)
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 排序之插入排序----直接插入排序和希尔排序(1) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记,欢迎大家在评论区交流讨…...

快速创建条形热力图
Excel中的条件格式可以有效的凸显数据特征,如下图中B列所示。 现在需要使用图表展现热力条形图,如下图所示。由于颜色有多个过渡色,因此手工逐个设置数据条的颜色,基本上是不可能完成的任务,使用VBA代码可以快速创建这…...

go switch 与 interface
go switch 与 interface 前言 前言 github.com/google/cel-go/common/types/ref type Val interface {// ConvertToNative converts the Value to a native Go struct according to the// reflected type description, or error if the conversion is not feasible.ConvertTo…...

BaseMapper 接口介绍
基于 mybatis-mapper/provider 核心部分实现的基础的增删改查操作,提供了一个核心的 io.mybatis.mapper.BaseMapper 接口和一个 预定义 的 io.mybatis.mapper.Mapper 接口,BaseMapper 接口定义如下: /*** 基础 Mapper 方法,可以在…...

HAL-Cubemax定时器使用记录
title: HAL-Cubemax定时器使用记录 tags: STM32HalCubemax 文章目录 HAL-Cubemax定时器使用记录分享一种思路1.创建一个ms(毫秒)级延时中断2.创建计数的变量3.在需要延时的函数中对变量阈值进行判断4.验证实例--完整使用记录代码 问题往期内容基础库HAL cubemax VSCODE GCC …...

同时使用磁吸充电器和Lightning时,iPhone充电速度会变快吗?
在智能手机的世界里,续航能力一直是用户关注的焦点。苹果公司以其创新的MagSafe技术和传统的Lightning接口,为iPhone用户提供了多样化的充电解决方案。 然而,当这两种技术同时使用时,它们能否带来更快的充电速度?本文…...

零成本搭建个人图床服务器
前言 图床服务器是一种用于存储和管理图片的服务器,可以给我们提供将图片上传后能外部访问浏览的服务。这样我们在写文章时插入的说明图片,就可以集中放到图床里,既方便多平台文章发布,又能统一管理和备份。 当然下面通过在 Git…...

SpringBoot 搭建sftp服务 实现远程上传和下载文件
maven依赖: <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version> </dependency>application.yml sftp:protocol: sftphost: port: 22username: rootpassword: sp…...

IDEA中使用leetcode 刷题
目录 1.IDEA下载leetcode插件 2.侧边点开插件 3.打开网页版登录找到cookie复制 4.回到IDEA登录 5.刷题 6.共勉 1.IDEA下载leetcode插件 2.侧边点开插件 3.打开网页版登录找到cookie复制 4.回到IDEA登录 5.刷题 6.共勉 算法题来了不畏惧, 挑战前行是成长的舞台…...

华为海思CPU解读
安全可靠CPU测评结果(华为海思篇) 中国信息安全测评中心于2024年5月20日发布安全可靠测评结果公告(2024年第1号),公布依据《安全可靠测评工作指南(试行)》的测评结果,自发布起有效期…...

中介子方程三十三
XXFXXuXXWXXuXXdXXrXXαXXuXpXXdXXpXuXXαXXrXXdXXuXWXπXXWXeXyXeXbXπXpXXNXXqXeXXrXXαXXuXpXXdXXpXuXXαXXrXXeXqXXNXXpXπXbXeXyXeXWXXπXWXuXXdXXrXXαXXuXpXXdXXpXuXXαXXrXXdXXuXXWXXuXXFXXEXXyXXEXXrXXαXXuXpXXdXXpXuXXαXXrXXEXXyXXαXiXXαXiXrXkXtXyXXpXVXXdXuXWX…...

今年哪两个行业可能有贝塔?
银行和综合板块存在比较明显的行业贝塔,背后原因是:银行板块中,最小的几家银行市值也不小;综合板块中,最大的几家市值也不大。 一、今年哪两个行业可能有贝塔? 我们一直强调今年市场呈现出【行业弱beta、风…...

嵌入式软件开发工具使用介绍
软件开发工具 辅助开发工具 硬件工具与仪器设备 逻辑分析仪使用 串口数据解码分析 示波器使用 1.示波器简介 TBS 1052B(Tektronix)系列数字存储示波器在紧凑的设计中提供了经济的性能。 由于多种标配功能, 包括 USB 连接、34 种自动测量、…...

【TB作品】MSP430G2553,单片机,口袋板, 交通灯控制系统
题8 交通灯控制系统 十字路口交通灯由红、绿两色LED显示器(两位8段LED显示器)组成,LED显示器显示切换倒计时,以秒为单位,每秒更新一次;为确保安全,绿LED计数到0转红,经5秒延时&#…...

windows 安装 Kubernetes(k8s)
windows 安装 docker 详情见: https://blog.csdn.net/sinat_32502451/article/details/133026301 minikube Minikube 是一种轻量级的Kubernetes 实现,可在本地计算机上创建VM 并部署仅包含一个节点的简单集群。 下载地址:https://github.…...

C语言 | Leetcode C语言题解之第189题轮转数组
题目: 题解: void swap(int* a, int* b) {int t *a;*a *b, *b t; }void reverse(int* nums, int start, int end) {while (start < end) {swap(&nums[start], &nums[end]);start 1;end - 1;} }void rotate(int* nums, int numsSize, int…...

【安全审核】音视频审核开通以及计费相关
融云控制台音视频审核入口:音视频审核 1 音视频审核文档:融云开发者文档 1 提示: 开发环境: 免费体验 7 天(含 21 万分钟音频流和 420 万张视频审核用量),免费额度用尽后,将关停服务…...

【实战】Spring Cloud Stream 3.1+整合Kafka
文章目录 前言新版版本优势实战演示增加maven依赖增加applicaiton.yaml配置新增Kafka通道消费者新增发送消息的接口 实战测试postman发送一个正常的消息postman发送异常消息 前言 之前我们已经整合过Spring Cloud Stream 3.0版本与Kafka、RabbitMQ中间件,简直不要太…...

java之可变字符串之append方法
可变字符串如果要添加内容,需要用到append方法 语法格式如下 sbf.append(obj) 其中sbf是任意的可变字符串 obj是任意数据类型的对象 这个方法是将任意数据转换成字符串,然后添加到此序列中 public class Buffer {public static void main(String[]…...

[保姆级教程]uniapp自定义导航栏
文章目录 导文隐藏默认导航栏:全局隐藏当前页面隐藏 添加自定义导航栏视图:手写导航栏组件导航栏 导文 在 UniApp 中,自定义导航栏通常涉及到隐藏默认的导航栏,并在页面顶部添加自定义的视图组件来模拟导航栏的功能。 隐藏默认导航…...