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

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...