当前位置: 首页 > 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邮箱 …...

Docker介绍与使用

Docker介绍与使用 目录: 一、Docker介绍 1、Docker概述与安装 2、Docker三要素 二、Docker常用命令的使用 1、镜像相关命令 2、容器相关命令 三、Docker实战之下载mysql、redis、zimg 一、Docker介绍 Docker是一个开源的应用容器引擎,让开发者可以打包…...

Gin框架: 使用go-ini配置参数与不同环境下的配置部署

关于 INI 配置文件与go-ini 1 )概述 在INI配置文件中可以处理各种数据的配置INI文件是一种简单的文本格式,常用于配置软件的各种参数go-ini 是地表 最强大、最方便 和 最流行 的 Go 语言 INI 文件操作库 Github 地址:https://github.com/go-…...

探究网络工具nc(netcat)的使用方法及安装步骤

目录 🐶1. 什么是nc(netcat)? 🐶2. nc(netcat)的基本使用方法 2.1 🥙使用 nc 进行端口监听 2.2 🥙使用 nc 进行端口扫描 2.3 🥙使用 Netcat 进行文件传输…...

深入浅出JVM(四)之类文件结构

深入浅出JVM(四)之类文件结构 Java文件编译成字节码文件后,通过类加载机制到Java虚拟机中,Java虚拟机能够执行所有符合要求的字节码,因此无论什么语言,只要能够编译成符合要求的字节码文件就能够被Java虚拟…...

Anaconda下的pkgs占用空间13G,如何安全的清理(已解决)

方法一:让Anaconda自行决定清理 执行命令 conda clean -p 我的Anaconda安装在D盘,具体位置如下。你的应该也能找到对应的位置 D:\*****\**\Anaconda3\pkgs (base) C:\Users\Liu_J>conda clean -p WARNING: C:\Users\***\.conda\pkgs does not ex…...

压缩感知常用的重建算法

重建算法的基本概念 在压缩感知(Compressed Sensing, CS)框架中,重建算法是指将从原始信号中以低于奈奎斯特率采集得到的压缩测量值恢复成完整信号的数学和计算过程。由于信号在采集过程中被压缩,因此重建算法的目标是找到最符合…...

c语言经典测试题2

1.题1 我们来思考一下它的结果是什么? 我们来分析一下:\\是转义为字符\,\123表示的是一个八进制,算一个字符,\t算一个字符,加上\0,应该有13个,但是strlen只计算\0前的字符个数。所以…...

⭐北邮复试刷题105. 从前序与中序遍历序列构造二叉树__递归分治 (力扣每日一题)

105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,…...

机房预约系统(个人学习笔记黑马学习)

1、机房预约系统需求 1.1系统简介 学校现有几个规格不同的机房,由于使用时经常出现“撞车“现象,现开发一套机房预约系统,解决这一问题。 1.2身份简介 分别有三种身份使用该程序 学生代表:申请使用机房教师:审核学生的预约申请管理员:给学生、教师创建账…...

7、内网安全-横向移动PTH哈希PTT票据PTK密匙Kerberos密码喷射

用途:个人学习笔记,有所借鉴,欢迎指正 目录 一、域横向移动-PTH-Mimikatz&NTLM 1、Mimikatz 2、impacket-at&ps&wmi&smb 二、域横向移动-PTK-Mimikatz&AES256 三、域横向移动-PTT-漏洞&Kekeo&Ticket 1、漏…...