当前位置: 首页 > news >正文

一、直方图相关学习

目录

  • 1、灰度直方图
    • 1.1 基本概念和作用
    • 1.2 代码示例
  • 2、BGR直方图
    • 2.1 基本概念和作用
    • 2.2 代码示例
  • 3、灰度直方图均衡
    • 1. 基本概念和作用
    • 2. 代码示例
  • 4、直方图变换(查找)
    • 4.1 基本概念和作用
    • 4.2 代码示例
  • 5、直方图匹配
    • 5.1 基本概念和作用
    • 5.2 代码示例
  • 6、直方图反向映射
    • 6.1 基本概念和作用
    • 6.2 代码示例
  • 7、H-S直方图
    • 7.1 基本概念和作用
    • 7.2 示例代码
  • 8、自定义直方图
    • 8.1 mask
  • 9、彩色直方图均衡
    • 示例代码
  • 10、直方图变换(累计)
    • 10.1 基本概念和作用
    • 10.2 示例代码
  • 11、直方图对比
    • 11.1 基本概念和作用
    • 11.2 示例代码

1、灰度直方图

1.1 基本概念和作用

表示图像中每个灰度级别的像素数量。用于分析图像的亮度分布情况。

1.2 代码示例

参数介绍

hist = cv2.calcHist(images, channels, mask, histSize, ranges, hist, accumulate)-images:输入图像的列表。对于灰度图像,它只包含一个元素(即一幅图像)。对于彩色图像,通常会传入一个包含所有颜色通道的列表。
-channels:指定要统计直方图的通道。对于灰度图像,值为[0];对于彩色图像,可以传入[0][1][2]分别表示蓝、绿、红通道。如果是彩色图像,也可以同时统计多个通道,例如[0, 1, 2]表示统计所有通道。
-mask:可选参数,用于指定计算直方图的区域。如果不需要指定区域,传入None
-histSize:指定直方图的大小,即灰度级别的个数。对于灰度图像,通常设置为256,表示从0255的灰度级别。对于彩色图像,可以设置为256,表示每个通道的灰度级别。
-ranges:指定像素值的范围。通常为[0, 256],表示灰度级别的范围。对于彩色图像,例如[0, 256, 0, 256, 0, 256]表示三个通道各自的范围。
-hist:可选参数,用于存储计算得到的直方图。如果不提供,函数会返回直方图
-accumulate:

示例

import cv2
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('../images/1.jpg', cv2.IMREAD_GRAYSCALE)# 计算灰度直方图
hist = cv2.calcHist([image], [0], None, [256], [0, 256])# 显示原图
plt.subplot(2, 1, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')# 显示灰度直方图
plt.subplot(2, 1, 2)
plt.plot(hist)
plt.title('Grayscale Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')# 调整子图布局,避免重叠
plt.tight_layout()# 显示图像和直方图
plt.show()

这里是引用

2、BGR直方图

2.1 基本概念和作用

BGR直方图是一种用于可视化彩色图像中蓝色(Blue)、绿色(Green)和红色(Red)三个通道的像素值分布情况的工具。了解图像中颜色的分布情况。通过分析BGR直方图,可以得知图像中某个颜色通道的强度,从而更好地理解图像的颜色特性。

2.2 代码示例

import cv2
import matplotlib.pyplot as plt# 读取彩色图像
image = cv2.imread('../images/2.jpg')# 分离通道
b, g, r = cv2.split(image)# 计算各通道的直方图
hist_b = cv2.calcHist([b], [0], None, [256], [0, 256])
hist_g = cv2.calcHist([g], [0], None, [256], [0, 256])
hist_r = cv2.calcHist([r], [0], None, [256], [0, 256])# 显示彩色图像
plt.subplot(2, 1, 1)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')# 显示BGR直方图
plt.subplot(2, 1, 2)
plt.plot(hist_b, color='blue', label='Blue')
plt.plot(hist_g, color='green', label='Green')
plt.plot(hist_r, color='red', label='Red')
plt.title('BGR Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.legend()# 调整子图布局,避免重叠
plt.tight_layout()
# 显示图像和直方图
plt.show()

这里是引用

3、灰度直方图均衡

1. 基本概念和作用

用于增强图像对比度的技术,通过调整图像中各个灰度级别的像素分布,使得整个灰度范围更均匀地覆盖,从而提高图像的视觉质量。这个过程可以使暗部和亮部细节更加清晰可见,改善图像的视觉效果。

2. 代码示例

import cv2
import matplotlib.pyplot as plt# 读取灰度图像
image = cv2.imread('../images/3.jpg', cv2.IMREAD_GRAYSCALE)# 进行灰度直方图均衡
equalized_image = cv2.equalizeHist(image)# 显示原始灰度图像
plt.subplot(2, 1, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Grayscale Image')# 显示均衡后的灰度图像
plt.subplot(2, 1, 2)
plt.imshow(equalized_image, cmap='gray')
plt.title('Equalized Grayscale Image')# 调整子图布局,避免重叠
plt.tight_layout()# 显示图像
plt.show()

在这里插入图片描述

4、直方图变换(查找)

4.1 基本概念和作用

直方图变换,也称为直方图查找,是一种用于调整图像对比度的技术。它通过变换图像的灰度级别,将原始图像的灰度分布均匀化,使得图像中所有灰度级别的像素值分布更加平均。这样可以增强图像的对比度,使细节更加突出,提高图像的视觉质量。
直方图变换的核心思想是调整图像中各个灰度级别的像素值,使得灰度值的分布更均匀,从而实现对比度的增强。

4.2 代码示例

import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
img = cv2.imread('../images/4.jpg', cv2.IMREAD_GRAYSCALE)# 计算原始图像的直方图
hist = cv2.calcHist([img], [0], None, [256], [0, 256])# 显示原始图像和直方图
plt.subplot(2, 2, 1), plt.imshow(img, cmap='gray'), plt.title('Original Image')
plt.subplot(2, 2, 2), plt.plot(hist), plt.title('Original Histogram')# 构建查找表,每个像素值增加50
lookup_table = np.arange(256, dtype=np.uint8)
lookup_table = cv2.add(lookup_table, 50)# 应用查找表
transformed_img = cv2.LUT(img, lookup_table)# 计算变换后图像的直方图
transformed_hist = cv2.calcHist([transformed_img], [0], None, [256], [0, 256])# 显示变换后图像和直方图
plt.subplot(2, 2, 3), plt.imshow(transformed_img, cmap='gray'), plt.title('Transformed Image')
plt.subplot(2, 2, 4), plt.plot(transformed_hist), plt.title('Transformed Histogram')plt.show()

图片中每个像素都增加五十个像素的效果
在这里插入图片描述

5、直方图匹配

5.1 基本概念和作用

通过调整图像的像素值,使其直方图匹配到另一图像的直方图,以实现两者视觉特性的一致性。在图像配准、图像融合等应用

5.2 代码示例

import cv2
import matplotlib.pyplot as plt
import numpy as npdef hist_match(source, target):# 将源图像和目标图像转换为灰度图source_gray = cv2.cvtColor(source, cv2.COLOR_BGR2GRAY)target_gray = cv2.cvtColor(target, cv2.COLOR_BGR2GRAY)# 计算源图像和目标图像的直方图source_hist = cv2.calcHist([source_gray], [0], None, [256], [0, 256])target_hist = cv2.calcHist([target_gray], [0], None, [256], [0, 256])# 直方图归一化cv2.normalize(source_hist, source_hist, 0, 255, cv2.NORM_MINMAX)cv2.normalize(target_hist, target_hist, 0, 255, cv2.NORM_MINMAX)# 计算累积分布函数(CDF)source_cdf = source_hist.cumsum()target_cdf = target_hist.cumsum()# 映射源图像的像素值到目标图像的CDFmapping = np.interp(source_cdf, target_cdf, range(256))# 应用映射到源图像matched_gray = cv2.LUT(source_gray, mapping.astype('uint8'))# 将灰度匹配的结果应用到RGB图像上matched_img = source.copy()for i in range(3):matched_img[:, :, i] = cv2.LUT(source[:, :, i], mapping.astype('uint8'))return matched_img# 读取源图像和目标图像
source_img = cv2.imread('../images/5-2.jpg')
target_img = cv2.imread('../images/5-1.jpg')# 进行直方图匹配
matched_img = hist_match(source_img, target_img)# 显示图像
plt.figure(figsize=(12, 6))plt.subplot(1, 3, 1), plt.imshow(cv2.cvtColor(source_img, cv2.COLOR_BGR2RGB)), plt.title('source (RGB)')
plt.subplot(1, 3, 2), plt.imshow(cv2.cvtColor(target_img, cv2.COLOR_BGR2RGB)), plt.title('target (RGB)')
plt.subplot(1, 3, 3), plt.imshow(cv2.cvtColor(matched_img, cv2.COLOR_BGR2RGB)), plt.title('result (RGB)')plt.show()

这里是引用

6、直方图反向映射

6.1 基本概念和作用

通过调整图像的像素值,使其直方图反向匹配到目标直方图,从而实现对比度和亮度的调整。直方图模型去目标图像中寻找相似的特征对象

6.2 代码示例

import cv2
import matplotlib.pyplot as plt
import numpy as npdef hist_reverse_mapping(source, target):# 将源图像和目标图像转换为灰度图source_gray = cv2.cvtColor(source, cv2.COLOR_BGR2GRAY)target_gray = cv2.cvtColor(target, cv2.COLOR_BGR2GRAY)# 计算源图像和目标图像的直方图source_hist = cv2.calcHist([source_gray], [0], None, [256], [0, 256])target_hist = cv2.calcHist([target_gray], [0], None, [256], [0, 256])# 直方图归一化cv2.normalize(source_hist, source_hist, 0, 1, cv2.NORM_MINMAX)cv2.normalize(target_hist, target_hist, 0, 1, cv2.NORM_MINMAX)# 计算反向映射mapping = np.interp(np.linspace(0, 1, 256), target_hist.flatten(), np.arange(256))# 应用反向映射到源图像mapped_img = cv2.LUT(source_gray, mapping.astype('uint8'))# 将灰度映射的结果应用到RGB图像上mapped_color_img = source.copy()for i in range(3):mapped_color_img[:, :, i] = cv2.LUT(source[:, :, i], mapping.astype('uint8'))return mapped_color_img# 读取源图像和目标图像
source_img = cv2.imread('../images/5-2.jpg')
target_img = cv2.imread('../images/5-1.jpg')# 进行直方图反向映射
mapped_img = hist_reverse_mapping(source_img, target_img)# 显示图像
plt.figure(figsize=(12, 6))plt.subplot(1, 3, 1), plt.imshow(cv2.cvtColor(source_img, cv2.COLOR_BGR2RGB)), plt.title('source (RGB)')
plt.subplot(1, 3, 2), plt.imshow(cv2.cvtColor(target_img, cv2.COLOR_BGR2RGB)), plt.title('target (RGB)')
plt.subplot(1, 3, 3), plt.imshow(cv2.cvtColor(mapped_img, cv2.COLOR_BGR2RGB)), plt.title('resource (RGB)')plt.show()

在这里插入图片描述

7、H-S直方图

7.1 基本概念和作用

用于表示图像颜色分布的直方图。它基于图像中每个像素的色调(Hue)和饱和度(Saturation)信息,通过统计这两个颜色属性的分布情况,形成直方图。H-S直方图是在颜色空间中对颜色特征进行可视化和分析的工具。应用于在颜色分析、图像检索和目标识别等

7.2 示例代码

import cv2
import numpy as np
import matplotlib.pyplot as pltdef compute_hs_histogram(image):# 将图像从BGR颜色空间转换为HSV颜色空间hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# 提取Hue和Saturation通道hue_channel = hsv_image[:,:,0]saturation_channel = hsv_image[:,:,1]# 计算Hue-Saturation直方图hs_histogram, _, _ = np.histogram2d(hue_channel.flatten(), saturation_channel.flatten(), bins=[180, 256], range=[[0, 180], [0, 256]])# 归一化直方图hs_histogram /= hs_histogram.sum()return hs_histogram# 读取图像
image = cv2.imread('../images/4.jpg')# 计算H-S直方图
hs_histogram = compute_hs_histogram(image)# 显示H-S直方图
plt.imshow(hs_histogram.T, cmap='viridis', extent=[0, 180, 0, 256], interpolation='nearest')
plt.title('H-S Histogram')
# 色调
plt.xlabel('Hue')
# 饱和度
plt.ylabel('Saturation')
plt.colorbar()
plt.show()

这里是引用

8、自定义直方图

8.1 mask

# 1 导入库
import cv2
import matplotlib.pyplot as plt
import numpy as np# 2 方法:显示图片
def show_image(image, title, pos):img_RGB = image[:, :, ::-1] # BGR to RGBplt.title(title)plt.subplot(2, 2, pos)plt.imshow(img_RGB)# 3 方法:显示灰度直方图
def show_histogram(hist, title, pos, color):plt.subplot(2, 2, pos)plt.title(title)plt.xlim([0, 256])plt.plot(hist, color=color)# 4 主函数
def main():# 5 创建画布plt.figure(figsize=(12, 7))plt.suptitle("Gray Image and Histogram with mask", fontsize=4, fontweight="bold")# 6 读取图片并灰度转换,计算直方图,显示img_gray = cv2.imread("../images/children.jpg", cv2.COLOR_BGR2GRAY) # 读取并进行灰度转换img_gray_hist = cv2.calcHist([img_gray], [0], None, [256], [0, 256]) # 计算直方图show_image(img_gray, "image gray", 1)show_histogram(img_gray_hist, "image gray histogram", 2, "m")# 7 创建mask,计算位图,直方图mask = np.zeros(img_gray.shape[:2], np.uint8)mask[130:500, 600:1400] = 255 # 获取mask,并赋予颜色img_mask_hist = cv2.calcHist([img_gray], [0], mask, [256], [0, 256]) # 计算mask的直方图# 8 通过位运算(与预算)计算带有mask的灰度图片mask_img = cv2.bitwise_and(img_gray, img_gray, mask = mask)# 9 显示带有mask的图片和直方图show_image(mask_img, "gray image with mask", 3)show_histogram(img_mask_hist, "histogram with masked gray image", 4, "m")plt.show()
if __name__ == '__main__':main()

这里是引用

9、彩色直方图均衡

示例代码

import cv2
import matplotlib.pyplot as plt
import numpy as np# 显示图片
def show_image(image, title, pos):plt.subplot(3, 2, pos)plt.title(title)image_RGB = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # BGR to RGBplt.imshow(image_RGB)plt.axis("off")# 显示彩色直方图 b, g, r
def show_histogram(hist, title, pos, color):plt.subplot(3, 2, pos)plt.title(title)plt.xlim([0, 256])for h, c in zip(hist, color):  # color: ('b', 'g', 'r')plt.plot(h, color=c)# 计算彩色直方图
def calc_color_hist(image):hist = []hist.append(cv2.calcHist([image], [0], None, [256], [0, 256]))hist.append(cv2.calcHist([image], [1], None, [256], [0, 256]))hist.append(cv2.calcHist([image], [2], None, [256], [0, 256]))return hist# 彩色直方图均衡化
def color_histogram_equalization(image):# 将图像从BGR颜色空间转换为YUV颜色空间yuv_image = cv2.cvtColor(image, cv2.COLOR_BGR2YUV)# 对亮度通道进行直方图均衡化yuv_image[:, :, 0] = cv2.equalizeHist(yuv_image[:, :, 0])# 将图像从YUV颜色空间转换回BGR颜色空间equalized_image = cv2.cvtColor(yuv_image, cv2.COLOR_YUV2BGR)return equalized_image# 主函数
def main():# 创建画布plt.figure(figsize=(12, 8))plt.suptitle("Color Histogram and Equalization", fontsize=14, fontweight="bold")# 读取原图片img = cv2.imread("../images/children.jpg")# 计算原始直方图img_hist = calc_color_hist(img)# 显示原始图片和直方图show_image(img, "RGB Image", 1)show_histogram(img_hist, "RGB Image Hist", 2, ('b', 'g', 'r'))# 彩色直方图均衡化equalized_img = color_histogram_equalization(img)equalized_img_hist = calc_color_hist(equalized_img)# 显示均衡化后的图片和直方图show_image(equalized_img, 'Equalized Image', 3)show_histogram(equalized_img_hist, 'Equalized Image Hist', 4, ('b', 'g', 'r'))plt.show()if __name__ == '__main__':main()

这里是引用

10、直方图变换(累计)

10.1 基本概念和作用

对图像的像素值进行累积,在直方图中,累积表示了某个像素值及其以下的像素值的总和。
累积直方图可以用以下步骤来计算:
-计算原始直方图(直方图中每个 bin 的值)。
-对原始直方图进行累加操作,得到累积直方图。

10.2 示例代码

import cv2
import matplotlib.pyplot as plt
import numpy as np# 显示图片
def show_image(image, title, pos):plt.subplot(4, 2, pos)plt.title(title)image_RGB = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # BGR to RGBplt.imshow(image_RGB)plt.axis("off")# 显示彩色直方图 b, g, r
def show_histogram(hist, title, pos, color):plt.subplot(4, 2, pos)plt.title(title)plt.xlim([0, 256])for h, c in zip(hist, color):  # color: ('b', 'g', 'r')plt.plot(h, color=c)# 计算彩色直方图
def calc_color_hist(image):hist = []hist.append(cv2.calcHist([image], [0], None, [256], [0, 256]))hist.append(cv2.calcHist([image], [1], None, [256], [0, 256]))hist.append(cv2.calcHist([image], [2], None, [256], [0, 256]))return hist# 计算累积直方图
def calc_cumulative_hist(hist):cumulative_hist = [np.cumsum(channel_hist) for channel_hist in hist]return cumulative_hist# 主函数
def main():# 创建画布plt.figure(figsize=(12, 16))plt.suptitle("Color Histogram, Equalization, and Cumulative Histogram", fontsize=14, fontweight="bold")# 读取原图片img = cv2.imread("../images/children.jpg")# 计算原始直方图img_hist = calc_color_hist(img)# 显示原始图片和直方图show_image(img, "RGB Image", 1)show_histogram(img_hist, "RGB Image Hist", 2, ('b', 'g', 'r'))# 计算并显示累积直方图cumulative_hist = calc_cumulative_hist(img_hist)show_histogram(cumulative_hist, 'Cumulative Histogram', 4, ('b', 'g', 'r'))plt.show()if __name__ == '__main__':main()

这里是引用

11、直方图对比

11.1 基本概念和作用

比较两幅图像的直方图来评估它们相似性的方法。基本原理是比较图像的颜色或灰度分布。

11.2 示例代码

在这里插入图片描述
Histogram Compare Result: 0.8173332006305307

import cv2
import matplotlib.pyplot as plt
import numpy as np# 显示图片
def show_image(image, title, pos):plt.subplot(4, 2, pos)plt.title(title)image_RGB = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.imshow(image_RGB)plt.axis("off")# 显示彩色直方图 b, g, r
def show_histogram(hist, title, pos, color):plt.subplot(4, 2, pos)plt.title(title)plt.xlim([0, 256])for h, c in zip(hist, color):  # color: ('b', 'g', 'r')plt.plot(h, color=c)# 计算彩色直方图
def calc_color_hist(image):hist = []hist.append(cv2.calcHist([image], [0], None, [256], [0, 256]))hist.append(cv2.calcHist([image], [1], None, [256], [0, 256]))hist.append(cv2.calcHist([image], [2], None, [256], [0, 256]))return hist# 直方图比较
def histogram_compare(image1, image2):hist1 = cv2.calcHist([image1], [0, 1, 2], None, [256, 256, 256], [0, 256, 0, 256, 0, 256])hist2 = cv2.calcHist([image2], [0, 1, 2], None, [256, 256, 256], [0, 256, 0, 256, 0, 256])# 使用巴氏距离进行直方图比较result = cv2.compareHist(hist1, hist2, cv2.HISTCMP_BHATTACHARYYA)return result# 主函数
def main():# 读取图片1img1 = cv2.imread("../images/11-1.jpg")# 读取图片2img2 = cv2.imread("../images/11-2.jpg")# 显示图片1show_image(img1, "Image 1", 1)# 计算并显示图片1的直方图img1_hist = calc_color_hist(img1)show_histogram(img1_hist, "Image 1 Hist", 2, ('b', 'g', 'r'))# 显示图片2show_image(img2, "Image 2", 5)# 计算并显示图片2的直方图img2_hist = calc_color_hist(img2)show_histogram(img2_hist, "Image 2 Hist", 6, ('b', 'g', 'r'))# 直方图比较hist_compare_result = histogram_compare(img1, img2)print(f"Histogram Compare Result: {hist_compare_result}")plt.show()if __name__ == '__main__':main()

相关文章:

一、直方图相关学习

目录 1、灰度直方图1.1 基本概念和作用1.2 代码示例 2、BGR直方图2.1 基本概念和作用2.2 代码示例 3、灰度直方图均衡1. 基本概念和作用2. 代码示例 4、直方图变换(查找)4.1 基本概念和作用4.2 代码示例 5、直方图匹配5.1 基本概念和作用5.2 代码示例 6、…...

Linux 权限详解

目录 一、权限的概念 二、权限管理 三、文件访问权限的相关设置方法 3.1chmod 3.2chmod ax /home/abc.txt 一、权限的概念 Linux 下有两种用户:超级用户( root )、普通用户。 超级用户:可以再linux系统下做任何事情&#xff…...

零基础学习8051单片机(十五)

本次先看书学习,并完成了课后习题,题目出自《单片机原理与接口技术》第五版—李清朝 答: (1)当 CPU正在处理某件事情的时候,外部发生的某一件事件请求 CPU 迅速去处理,于是,CPU暂时中止当前的工…...

项目的一些难点

1.不用redis?分布式锁,如何防止用户重复点击? 1.乐观锁 乐观锁是一种在数据库层面上避免并发冲突的机制。它通常通过在数据库记录中添加一个版本号(或时间戳)来实现。每次更新记录时,都会检查版本号是否与数据库中的…...

Kubernetes 卷存储 NFS | nfs搭建配置 原理介绍 nfs作为存储卷使用

1、NFS介绍 NFS(Network File System)是一种分布式文件系统协议,允许客户端远程访问服务器上的文件,实现数据共享。它整合多个存储设备为统一文件系统,方便数据存储和管理,支持负载均衡和故障转移&#xf…...

开启智能互动新纪元——ChatGPT提示词工程的引领力

目录 提示词工程的引领力 高效利用ChatGPT提示词方法 提示词工程的引领力 近年来,随着人工智能技术的迅猛发展,ChatGPT提示词工程正逐渐崭露头角,为智能互动注入了新的活力。这一技术的引入,使得人机交流更加流畅、贴近用户需求&…...

ElasticSearch语法

Elasticsearch 概念 入门学习: Index索引>MySQL 里的表(table)建表、增删改查(查询需要花费的学习时间最多)用客户端去调用 ElasticSearch(3 种)语法:SQL、代码的方法(4 种语法) ES 相比于 MySQL,能够自动帮我们做分词,能够非常高效、灵活地查询内…...

SMT贴片加工厂需要哪些加工资料

SMT贴片加工中在评估报价的时候需要给到SMT贴片加工厂以下资料,以便工程师和采购进行工艺和报价评估。 在SMT加工中如果需要供应商提供一站式的加工服务,那么在前期就需要更频繁的沟通和配合,包工包料服务是需要PCB制板资料和制板说明、BOM清…...

jmeter下载base64加密版pdf文件

一、何为base64加密版pdf文件 如下图所示,接口jmeter执行后,返回一串包含大小写英文字母、数字、、/、的长字符串,直接另存为pdf文件后,文件有大小,但是打不开;另存为doc文件后,打开可以看到和…...

【regex】正则表达式

集合 [0-9.] [0-9.\-] 例子 正则表达式,按照规则写,写的时候应该不算困难,但是可读性差 不同语言中regex会有微小的差异 vim 需要转义, perl/python中不需要转义 锚位 \b am\b i am 命名 / 命名捕获组 ( 捕获组(…...

78.Spring和SpringBoot的关系和区别?

一、Spring和SpringBoot的关系和区别 SpringBoot是Spring生态的产品。 Spring Framework是一个容器框架 SpringBoot 它不是一个框架、它是一个可以快速构建基于Spring的脚手架(里面包含了Spring和各种框架),为开发Spring生态其他框架铺平道路&#xff0…...

【PyTorch][chapter 17][李宏毅深度学习]【无监督学习][ Auto-encoder]

前言: 本篇重点介绍AE(Auto-Encoder) 自编码器。这是深度学习的一个核心模型. 自编码网络是一种基于无监督学习方法的生成类模型,自编码最大特征输出等于输入 Yann LeCun&Bengio, Hinton 对无监督学习的看法. 目录: AE 模型原…...

Modern C++ std::variant的实现原理

前言 std::variant是C17标准库引入的一种类型,用于安全地存储和访问多种类型中的一种。它类似于C语言中的联合体(union),但功能更为强大。与联合体相比,std::variant具有类型安全性,可以判断当前存储的实际…...

⭐北邮复试刷题LCR 018. 验证回文串__双指针 (力扣119经典题变种挑战)

LCR 018. 验证回文串 给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。 本题中,将空字符串定义为有效的 回文串 。 示例 1: 输入: s “A man, a plan, a canal: Panama” 输出: true 解释…...

C++面试:数据库的权限管理数据库的集群和高可用

目录 一、数据库的权限管理 1. 用户和角色管理 用户管理 实例举例(以MySQL为例): 角色管理 实例举例(以MySQL为例): 总结 2. 权限和授权 用户和角色管理 用户管理 角色管理 权限和授权 权限 授…...

个人搭建部署gpt站点

2024搭建部署gpt 参照博客 https://cloud.tencent.com/developer/article/2266669?areaSource102001.19&traceIdRmFvGjZ9BeaIaFEezqQBj博客核心点 准备好你的 OpenAI API Key; 点击右侧按钮开始部署: Deploy with Vercel,直接使用 Github 账号登…...

samber/lo 库的使用方法: condition

samber/lo 库的使用方法: condition samber/lo 是一个 Go 语言库,使用泛型实现了一些常用的操作函数,如 Filter、Map 和 FilterMap。汇总目录页面 这个库函数太多,因此我决定按照功能分别介绍,本文介绍的是 samber/l…...

Chrome插件精选 — 缓存清理

Chrome实现同一功能的插件往往有多款产品,逐一去安装试用耗时又费力,在此为某一类型插件挑选出比较好用的一款或几款,尽量满足界面精致、功能齐全、设置选项丰富的使用要求,便于节省一个个去尝试的时间和精力。 1. Chrome清理大师…...

Redis之缓存穿透问题解决方案实践SpringBoot3+Docker

文章目录 一、介绍二、方案介绍三、Redis Docker部署四、SpringBoot3 Base代码1. 依赖配置2. 基本代码 五、缓存优化代码1. 校验机制2. 布隆过滤器3. 逻辑优化 一、介绍 当一种请求,总是能越过缓存,调用数据库,就是缓存穿透。 比如当请求一…...

每日shell脚本之超级整合程序3.0

每日shell脚本之超级整合程序3.0 本期带来之前的升级版2.0整合脚本程序,学习工作小利器,同时模块化构建方便二次开发。 上图 上源码 #!/usr/bin/bash # *******************************************# # * CDDN : M乔木 # # * qq邮箱 …...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Linux操作系统共享Windows操作系统的文件

目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...

用 FFmpeg 实现 RTMP 推流直播

RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。 一般来说,直播服务商会给你: ✅ 一个 RTMP 推流地址(你推视频上去) ✅ 一个 HLS 或 FLV 拉流地址(观众观看用)…...