PyQt + OpenCV综合训练

一、PyQt + OpenCV 图像处理应用设计

创建一个 PyQt 应用程序,该应用程序能够:

①使用 OpenCV 加载一张图像。

②在 PyQt 的窗口中显示这张图像。

③提供四个按钮(QPushButton):

- 一个用于将图像转换为灰度图

- 一个用于将图像恢复为原始彩色图

- 一个用于将图像进行翻转

- 一个用于将图像进行旋转

④当用户点击按钮时,相应地更新窗口中显示的图像。

1.思路分析

①功能需求

图像加载:使用 OpenCV 加载一张彩色图像。
图像显示:将图像显示在 PyQt 的窗口中(QLabel)。
按钮功能

  • 灰度化:将图像转换为灰度图。
  • 恢复原始图像:将图像恢复到初始状态。
  • 翻转图像:水平翻转图像。
  • 旋转图像:顺时针旋转图像90度。

动态更新:每次点击按钮后,图像实时更新到窗口中。

②用户界面设计

QLabel:用于显示图像。
QPushButton(四个按钮):分别用于“灰度化”、“恢复原始图像”、“翻转图像”、“旋转图像”。
QFileDialog:用于打开图像文件。

③核心逻辑

图像加载

  • 使用 cv2.imread() 加载图像。
  • 将 OpenCV 图像转换为 PyQt 支持的 QPixmap 格式。
  • 显示在 QLabel 上。

图像处理

  • 灰度化:使用 cv2.cvtColor 转换为灰度图。
  • 恢复原始图像:使用存储的原始图像副本进行还原。
  • 翻转图像:使用 cv2.flip 进行水平翻转。
  • 旋转图像:使用 cv2.getRotationMatrix2D 和 cv2.warpAffine 进行旋转。

图像显示

  • 每次处理后,将结果通过 QImage 和 QPixmap 转换并实时更新 QLabel。

2.设计到的函数方法

①__init__()

功能:初始化主窗口,设置 UI 元素,连接按钮信号与槽。
主要方法

  • 加载 UI 界面。
  • 初始化 QLabel 和 QPushButton。
  • 绑定按钮事件。

②open_file_dialog()

功能:打开文件对话框,加载用户选择的图像。
主要方法

  • 使用 QFileDialog.getOpenFileName 选择文件。
  • 使用 cv2.imread 读取图像。
  • 调用 update_image_label() 显示图像。

③update_image_label(image)

功能:将 OpenCV 图像转换为 QPixmap,并更新到 QLabel 上。
主要方法

  • 使用 QImage 将图像格式转换。
  • 使用 QPixmap.fromImage 更新 QLabel。

④convert_to_gray()

功能:将当前图像转换为灰度图像。
主要方法

  • 使用 cv2.cvtColor 将图像转换为灰度。
  • 调用 update_image_label() 显示图像。

⑤reset_to_original()

功能:将图像还原到初始状态。
主要方法

  • 使用原始图像副本进行还原。
  • 调用 update_image_label() 显示图像。

⑥flip_image()

功能:对图像进行水平翻转。
主要方法

  • 使用 cv2.flip 进行水平翻转。
  • 调用 update_image_label() 显示图像。

⑦rotate_image()

功能:顺时针旋转图像90度。
主要方法

  • 使用 cv2.getRotationMatrix2D 计算旋转矩阵。
  • 使用 cv2.warpAffine 应用旋转。
  • 调用 update_image_label() 显示图像。

3.代码

from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QFileDialog, QPushButton
from PyQt6.QtGui import QPixmap, QAction, QImage, QIcon
from PyQt6 import uic
import cv2  # OpenCV 用于处理图像# 创建主窗口类
class MainWindow(QMainWindow):def __init__(self):super().__init__()# 动态加载 UI 文件uic.loadUi("picture_editor1.ui", self)# 设置窗口标题和图标self.setWindowTitle("图像编辑器1")  # 改变窗口标签self.setWindowIcon(QIcon("picture_photo_image_icon_131252.png"))# 获取组件self.open_action = self.findChild(QAction, "open")self.picture_label = self.findChild(QLabel, "picture")  # 获取 QLabel 对象self.gray_button = self.findChild(QPushButton, "gray_button")  # 获取灰度按钮self.reset_button = self.findChild(QPushButton, "reset_button")  # 获取恢复按钮self.flip_button = self.findChild(QPushButton, "flip_button")  # 获取翻转按钮self.rotate_button = self.findChild(QPushButton, "rotate_button")  # 获取旋转按钮# 连接组件的触发信号self.open_action.triggered.connect(self.open_file_dialog)self.gray_button.clicked.connect(self.convert_to_gray)  # 连接灰度按钮self.reset_button.clicked.connect(self.reset_to_original)  # 连接恢复按钮self.flip_button.clicked.connect(self.flip_image)  # 连接翻转按钮self.rotate_button.clicked.connect(self.rotate_image)  # 连接旋转按钮self.current_image = None  # 用于存储当前的图像self.original_image = None # 存储当前图像和原始图像# 弹出文件对话框并显示选择的图像def open_file_dialog(self):# 弹出文件对话框,限制为 .png 和 .jpg 文件file_path, _ = QFileDialog.getOpenFileName(self,"选择图片文件",  # 文件对话框标题"","Images (*.png *.jpg)"  # 文件过滤器)# 如果选择了文件,加载到 QLabel 中if file_path:# 使用 OpenCV 加载图像(彩色图像)self.original_image = cv2.imread(file_path)self.current_image = self.original_image.copy()  # 初始化 current_image# 将图像转换为 QPixmap 以显示self.update_image_label(self.current_image)# 设置 QLabel 的大小为图片的原始大小# 更新 QLabel 显示的图像def update_image_label(self, image):height, width, channel = image.shapebytes_per_line = 3 * widthq_image = QImage(image.data, width, height, bytes_per_line, QImage.Format.Format_BGR888)pixmap = QPixmap.fromImage(q_image)self.picture_label.setPixmap(pixmap)self.picture_label.setFixedSize(pixmap.size())  # 设置 QLabel 的大小为图片的原始大小# 将图像转换为灰度图def convert_to_gray(self):if self.current_image is None:return  # 如果没有加载图片,则直接返回gray_image = cv2.cvtColor(self.current_image, cv2.COLOR_BGR2GRAY)self.current_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR)self.update_image_label(self.current_image)# 恢复原始图像def reset_to_original(self):if self.current_image is None:return  # 如果没有加载图片,则直接返回self.current_image = self.original_image.copy()self.update_image_label(self.current_image)# 翻转图像def flip_image(self):if self.current_image is None:return  # 如果没有加载图片,则直接返回self.current_image = cv2.flip(self.current_image, 1)  # 水平翻转self.update_image_label(self.current_image)# 旋转图像def rotate_image(self):if self.current_image is None:return  # 如果没有加载图片,则直接返回height, width = self.current_image.shape[:2]center = (width // 2, width // 2)rotation_matrix = cv2.getRotationMatrix2D(center, 270, 1.0)  # 向右旋转90度self.current_image = cv2.warpAffine(self.current_image, rotation_matrix, (width, height))self.update_image_label(self.current_image)if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()app.exec()

4.效果展示

加载图像
灰度化图像
还原图像
翻转图像
旋转图像

二、PyQt + OpenCV 图像亮度与对比度调整应用设计

根据下列要求写出思路分析和设计到的函数方法:

创建一个 PyQt 应用程序,该应用程序能够:

①使用 OpenCV 加载一张彩色图像,并在 PyQt 的窗口中显示它。

②提供一个滑动条(QSlider),允许用户调整图像的亮度。

③当用户调整滑动条时,实时更新窗口中显示的图像亮度。

④添加另一个滑动条(QSlider),允许用户调整图像的对比度。

⑤当用户调整滚动条时,实时更新窗口中显示的图像对比度。

⑥提供一个按钮(QPushButton),允许用户将图像保存为新的文件。

⑦当用户点击保存按钮时,将调整后的图像保存到指定的路径,OpenCV中使用cv2.imwrite()来保存图片。

1.思路分析

①功能需求

图像加载:使用 OpenCV 加载彩色图像,并在 PyQt 窗口中显示。
亮度调整:通过 QSlider 调整图像的亮度,实时更新显示。
对比度调整:通过 QSlider 调整图像的对比度,实时更新显示。
保存功能:点击 QPushButton,将当前调整后的图像保存到指定路径。

②用户界面设计

QLabel:用于显示图像。
QSlider

  • 亮度滑动条:调整图像亮度。
  • 对比度滑动条:调整图像对比度。

QPushButton

  • 保存按钮:将调整后的图像保存到文件。

QFileDialog:用于选择图像文件和保存图像文件。

③关键功能

图像加载

  • 使用 cv2.imread() 加载图像。
  • 将 OpenCV 图像格式转换为 QPixmap 格式,在 QLabel 中显示。

亮度调整

  • 使用公式:result = image + beta(beta 表示亮度值)。
  • 通过 QSlider 获取用户选择的亮度值,实时更新图像。

对比度调整

  • 使用公式:result = image * alpha(alpha 表示对比度值)。
  • 通过 QSlider 获取用户选择的对比度值,实时更新图像。

实时更新

  • 每次滑动滑动条时,调用 update_image() 方法,重新计算并显示图像。

保存图像

  • 使用 cv2.imwrite() 保存当前图像到用户指定路径。

2.设计到的函数方法

①__init__()

功能:初始化主窗口,设置 UI 元素,连接按钮信号与槽。
主要方法

  • 加载 UI 界面。
  • 初始化 QLabel、QSlider 和 QPushButton。
  • 绑定按钮事件。

②open_file_dialog()

功能:打开文件对话框,加载用户选择的图像。
主要方法

  • 使用 QFileDialog.getOpenFileName 选择文件。
  • 使用 cv2.imread 读取图像。
  • 调用 display_image() 显示图像。

③display_image(image)

功能:将 OpenCV 图像转换为 QPixmap,并更新到 QLabel 上。
主要方法

  • 使用 QImage 将图像格式转换。
  • 使用 QPixmap.fromImage 更新 QLabel。

④update_image()

功能:调整亮度和对比度。
主要方法

  • 使用cv2.convertScaleAbs()调整图像的亮度和对比度。
  • alpha:对比度调整系数。
  • beta:亮度调整值。

⑤save_image()

功能:保存当前处理后的图像。
主要方法

  • 使用 QFileDialog.getSaveFileName() 获取保存路径。
  • 使用 cv2.imwrite() 保存图像。

3.代码

from PyQt6.QtWidgets import QApplication, QMainWindow, QFileDialog, QSlider, QLabel, QPushButton
from PyQt6.QtGui import QPixmap, QAction, QImage, QIcon
from PyQt6 import uic
import cv2class MainWindow(QMainWindow):def __init__(self):super().__init__()# 加载 UI 文件uic.loadUi("picture_editor2.ui", self)# 设置窗口标题和图标self.setWindowTitle("图像编辑器2")  # 改变窗口标签self.setWindowIcon(QIcon("picture_photo_image_icon_131252.png"))# 获取组件self.open_action = self.findChild(QAction, "open")self.picture_label = self.findChild(QLabel, "picture")  # 获取 QLabel 对象self.brightness_slider = self.findChild(QSlider, "brightness_slider")self.contrast_slider = self.findChild(QSlider, "contrast_slider")self.save_button = self.findChild(QPushButton, "save_button")# 设置滑动条范围self.brightness_slider.setMinimum(-100)self.brightness_slider.setMaximum(100)self.brightness_slider.setValue(0)self.contrast_slider.setMinimum(-50)self.contrast_slider.setMaximum(50)self.contrast_slider.setValue(0)# 绑定事件self.open_action.triggered.connect(self.open_file_dialog)self.brightness_slider.valueChanged.connect(self.update_image)self.contrast_slider.valueChanged.connect(self.update_image)self.save_button.clicked.connect(self.save_image)# 初始化变量self.original_image = Noneself.processed_image = None# 弹出文件对话框并显示选择的图像def open_file_dialog(self):# 弹出文件对话框,限制为 .png 和 .jpg 文件file_path, _ = QFileDialog.getOpenFileName(self,"选择图片文件",  # 文件对话框标题"","Images (*.png *.jpg)"  # 文件过滤器)# 如果选择了文件,加载到 QLabel 中if file_path:# 使用 OpenCV 加载图像(彩色图像)self.original_image = cv2.imread(file_path)self.current_image = self.original_image.copy()  # 初始化 current_image# 将图像转换为 QPixmap 以显示self.display_image(self.current_image)# 设置 QLabel 的大小为图片的原始大小# 在 QLabel 中显示图像def display_image(self, image):height, width, channel = image.shapebytes_per_line = 3 * widthq_image = QImage(image.data, width, height, bytes_per_line, QImage.Format.Format_BGR888)pixmap = QPixmap.fromImage(q_image)self.picture_label.setPixmap(pixmap)self.picture_label.setFixedSize(pixmap.size())  # 设置 QLabel 的大小为图片的原始大小# 更新图像亮度和对比度def update_image(self):if self.original_image is None:return# 获取亮度和对比度值brightness = self.brightness_slider.value()contrast = self.contrast_slider.value()# 调整对比度和亮度alpha = 1.0 + contrast / 50.0  # 对比度调节系数beta = brightness  # 亮度调节值self.processed_image = cv2.convertScaleAbs(self.original_image, alpha=alpha, beta=beta)# 显示调整后的图像self.display_image(self.processed_image)# 保存调整后的图像def save_image(self):if self.processed_image is None:returnfile_path, _ = QFileDialog.getSaveFileName(self,"保存图像","","Images (*.png *.jpg *.bmp)")if file_path:cv2.imwrite(file_path, self.processed_image)if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()app.exec()

4.效果展示

加载图像
调整亮度
调整对比度
保存图像

三、PyQt + OpenCV 图像处理应用设计(模糊、锐化、边缘检测)

根据下列要求写出思路分析和设计到的函数方法:

创建一个 PyQt 应用程序,该应用程序能够:

①使用 OpenCV 加载一张图像。

②在 PyQt 的窗口中显示这张图像。

③提供一个下拉列表(QComboBox),对图像做(模糊、锐化、边缘检测)处理:

- 模糊——使用cv2.GaussianBlur()实现

- 锐化——使用cv2.Laplacian()、cv2.Sobel()实现

- 边缘检测——使用cv2.Canny()实现

④当用户点击下拉列表选项时,相应地更新窗口中显示的图像。

⑤提供一个按钮,当用户点击按钮时,能保存调整后的图像。

1.思路分析

①功能需求

图像加载:使用 OpenCV 加载彩色图像,并在 PyQt 窗口中显示。

图像处理:通过 QComboBox 选择图像处理方式:

  • 模糊:使用 cv2.GaussianBlur() 进行模糊处理。
  • 锐化:使用 cv2.Laplacian() 和 cv2.Sobel() 进行锐化处理。
  • 边缘检测:使用 cv2.Canny() 进行边缘检测。

实时更新:用户选择不同的选项时,实时显示处理后的图像。

图像保存:通过 QPushButton 将当前处理后的图像保存到指定路径。

②用户界面设计

QLabel:用于显示图像。

QComboBox

  • 提供三个选项:模糊、锐化、边缘检测。

QPushButton

  • 保存按钮:将当前处理后的图像保存到文件。

QFileDialog

  • 用于选择图像文件和保存图像文件。

③关键功能

图像加载

  • 使用 cv2.imread() 加载图像。
  • 将 OpenCV 图像格式转换为 QPixmap 格式,在 QLabel 中显示。

模糊处理

  • 使用 cv2.GaussianBlur() 对图像进行模糊处理。

锐化处理

  • 使用 cv2.Laplacian() 和 cv2.Sobel() 对图像进行锐化处理。

边缘检测

  • 使用 cv2.Canny() 提取图像的边缘信息。

实时更新

  • 用户在下拉列表中选择不同的处理方式时,实时调用相应函数,更新图像。

保存图像

  • 使用 cv2.imwrite() 将当前显示的图像保存到用户指定路径。

2.设计到的函数方法

①__init__()

功能:初始化窗口、设置 UI 组件、绑定事件。
主要方法

  • 初始化 QLabel、QComboBox 和 QPushButton。
  • 绑定按钮和下拉列表的信号与槽。

②open_file_dialog()

功能:弹出文件对话框,加载图像。
主要方法

  • 使用 QFileDialog.getOpenFileName 选择图像文件。
  • 使用 cv2.imread() 加载图像。
  • 调用display_image() 显示图像。

③display_image(image)

功能:将 OpenCV 图像转换为 QPixmap,并显示在 QLabel 中。
主要方法

  • 使用 QImage 转换图像格式。
  • 使用 QPixmap.fromImage() 更新 QLabel。

④process_image()

功能:根据下拉列表选项,应用不同的图像处理操作。
主要方法

  • 模糊:使用 cv2.GaussianBlur()。
  • 锐化:使用 cv2.filter2D。
  • 边缘检测:使用 cv2.Canny()。
  • 调用 display_image() 显示处理后的图像。

⑤save_image()

功能:保存当前处理后的图像。
主要方法

  • 使用 QFileDialog.getSaveFileName() 获取保存路径。
  • 使用 cv2.imwrite() 保存图像。

3.代码

from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QComboBox, QPushButton, QFileDialog
from PyQt6.QtGui import QPixmap, QAction, QImage, QIcon
from PyQt6 import uic
import cv2
import numpy as npclass MainWindow(QMainWindow):def __init__(self):super().__init__()# 动态加载 UI 文件uic.loadUi("picture_editor3.ui", self)# 设置窗口标题和图标self.setWindowTitle("图像编辑器3")  # 改变窗口标签self.setWindowIcon(QIcon("picture_photo_image_icon_131252.png"))# 获取 UI 组件self.open_action = self.findChild(QAction, "open")self.picture_label = self.findChild(QLabel, "picture")  # QLabel 显示图像self.process_combo = self.findChild(QComboBox, "comboBox")  # QComboBox 下拉列表self.save_button = self.findChild(QPushButton, "save_button")  # QPushButton 保存按钮# 初始化变量self.original_image = None  # 原始图像self.processed_image = None  # 处理后的图像# 设置下拉列表选项self.process_combo.addItems(["无处理", "模糊", "锐化", "边缘检测"])# 连接信号和槽self.open_action.triggered.connect(self.open_file_dialog)self.process_combo.currentTextChanged.connect(self.process_image)self.save_button.clicked.connect(self.save_image)# 初始化变量self.original_image = Noneself.processed_image = None# 弹出文件对话框并显示选择的图像def open_file_dialog(self):# 弹出文件对话框,限制为 .png 和 .jpg 文件file_path, _ = QFileDialog.getOpenFileName(self,"选择图片文件",  # 文件对话框标题"","Images (*.png *.jpg)"  # 文件过滤器)# 如果选择了文件,加载到 QLabel 中if file_path:# 使用 OpenCV 加载图像(彩色图像)self.original_image = cv2.imread(file_path)self.current_image = self.original_image.copy()  # 初始化 current_image# 将图像转换为 QPixmap 以显示self.display_image(self.current_image)# 设置 QLabel 的大小为图片的原始大小# 在 QLabel 中显示图像def display_image(self, image):height, width, channel = image.shapebytes_per_line = 3 * widthq_image = QImage(image.data, width, height, bytes_per_line, QImage.Format.Format_BGR888)pixmap = QPixmap.fromImage(q_image)self.picture_label.setPixmap(pixmap)self.picture_label.setFixedSize(pixmap.size())  # 设置 QLabel 的大小为图片的原始大小# 根据下拉列表选择处理图像def process_image(self):if self.original_image is None:returnoption = self.process_combo.currentText()if option == "模糊":self.processed_image = cv2.GaussianBlur(self.original_image, (11, 11), 0)elif option == "锐化":kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])self.processed_image = cv2.filter2D(self.original_image, -1, kernel)elif option == "边缘检测":gray_image = cv2.cvtColor(self.original_image, cv2.COLOR_BGR2GRAY)self.processed_image = cv2.Canny(gray_image, 100, 200)# 将单通道边缘图像转换为三通道以显示self.processed_image = cv2.cvtColor(self.processed_image, cv2.COLOR_GRAY2BGR)else:self.processed_image = self.original_image.copy()self.display_image(self.processed_image)# 保存处理后的图像def save_image(self):if self.processed_image is None:returnfile_path, _ = QFileDialog.getSaveFileName(self,"保存图像","","Images (*.png *.jpg *.bmp)")if file_path:cv2.imwrite(file_path, self.processed_image)if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()app.exec()

4.效果展示

加载图像
模糊化图像
锐化图像
边缘检测
保存图像

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

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

相关文章

掌握Docker命令与Dockerfile实战技巧:快速构建高效容器化应用

1. 介绍 Docker 是现代开发和运维的必备工具,集成了容器技术的优势。本文将记录 Docker 的常用指令,并会随着使用经验的积累进行不定期更新。 2. 常用命令 2.1 启动容器(前台交互模式) docker run --privileged --volume /hom…

React中最优雅的异步请求

给大家分享在React19中使用useSuspense处理异步请求为什么是被认为最优雅的解决方案 一. 传统方案 解决异步请求的方案中,我们要处理至少两个最基本的逻辑 正常的数据显示数据加载的UI状态 例如: export default function Index(){const [content, …

数据库高安全—openGauss安全整体架构安全认证

openGauss作为新一代自治安全数据库,提供了丰富的数据库基础安全能力,并逐步完善各类高阶安全能力。这些安全能力涵盖了访问登录认证、用户权限管理、审计与追溯及数据安全隐私保护等。本章节将围绕openGauss安全机制进行源码解读,以帮助数据…

linux-23 文件管理(一)创建文件touch,stat

那接下来看看文件的创建和删除,那我们怎么去创建一个文件?各种方式都能实现,当然,这里先说一说,就像mkdir创建空目录一样,我们如何创建一个空文件?创建空文件其实很简单,有一个命令歪…

Linux 基本指令

目录 1.常见指令 1.1 ls指令 1.2 pwd指令 1.3 cd指令 1.4 touch指令 1.5 mkdir指令 1.6 rm和rmdir指令 1.7 man指令 1.8 cp指令 1.9 mv指令 ​编辑 1.10 cat指令 1.11 more指令 1.12 less指令 1.13 head指令 1.14.tail指令 1.15 时间相关的指令 1.16 cal…

金蝶V10中间件的使用

目录 环境准备搭建过程配置修改应用部署 环境准备 Linux内核服务器JDK1.8安装包:AAS-V10.zip程序包:***.war 搭建过程 将安装包上传至服务器opt目录下,官方给定的默认服务主目录为“/opt/AAS-V10/ApusicAS/aas/”;解压安装包(解…

前端开发 -- 自动回复机器人【附完整源码】

一&#xff1a;效果展示 本项目实现了一个简单的网页聊天界面&#xff0c;用户可以在输入框中输入消息&#xff0c;并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容&#xff0c;通过关键字匹配来生成自动回复。 二&#xff1a;源代码分享 <!DOCTYP…

Python数据可视化小项目

英雄联盟S14世界赛选手数据可视化 由于本学期有一门数据可视化课程&#xff0c;课程结课作业要求完成一个数据可视化的小Demo&#xff0c;于是便有了这个小项目&#xff0c;课程老师要求比较简单&#xff0c;只要求熟练运用可视化工具展示数据&#xff0c;并不要求数据来源&am…

代码随想录五刷day6

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣144. 二叉树的前序遍历(递归)二、力扣144. 二叉树的前序遍历(迭代)三、力扣145. 二叉树的后序遍历(递归)四、力扣145. 二叉树的后序遍历(迭代)五、力扣…

Linux系统编程——详解页表

目录 一、前言 二、深入理解页表 三、页表的实际组成 四、总结&#xff1a; 一、前言 页表是我们之前在讲到程序地址空间的时候说到的&#xff0c;它是物理内存到进程程序地址空间的一个桥梁&#xff0c;通过它物理内存的数据和代码才能映射到进程的程序地址空间中&#xff…

【Java数据结构】LinkedList与链表

认识LinkedList LinkedList就是一个链表&#xff0c;它也是实现List接口的一个类。LinkedList就是通过next引用将所有的结点链接起来&#xff0c;所以不需要数组。LinkedList也是以泛型的方法实现的&#xff0c;所以使用这个类都需要实例化对象。 链表分为很多种&#xff0c;比…

《一文读懂卷积网络CNN:原理、模型与应用全解析》

《一文读懂卷积网络CNN&#xff1a;原理、模型与应用全解析》 一、CNN 基本原理大揭秘&#xff08;一&#xff09;从人类视觉到 CNN 灵感&#xff08;二&#xff09;核心组件详解 二、经典 CNN 模型巡礼&#xff08;一&#xff09;LeNet-5&#xff1a;开山鼻祖&#xff08;二&a…

教育元宇宙的优势与核心功能解析

随着科技的飞速发展&#xff0c;教育领域正迎来一场前所未有的变革。教育元宇宙作为新兴的教育形态&#xff0c;以其独特的优势和丰富的功能&#xff0c;正在逐步改变我们的学习方式。本文将深入探讨教育元宇宙的优势以及其核心功能&#xff0c;为您揭示这一未来教育的新趋势。…

openGauss与GaussDB系统架构对比

openGauss与GaussDB系统架构对比 系统架构对比openGauss架构GaussDB架构 GaussDB集群管理组件 系统架构对比 openGauss架构 openGauss是集中式数据库系统&#xff0c;业务数据存储在单个物理节点上&#xff0c;数据访问任务被推送到服务节点执行&#xff0c;通过服务器的高并…

idea 8年使用整理

文章目录 前言idea 8年使用整理1. 覆盖application配置2. 启动的时候设置编辑空间大小&#xff0c;并忽略最大空间3. 查询类的关系4. 查看这个方法的引用关系5. 查看方法的调用关系5.1. 查看被调用关系5.2. 查看调用关系 6. 方法分隔线7. 选择快捷键类型8. 代码预览插件9. JReb…

C++ OCR 文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

Unity中UGUI的Button动态绑定引用问题

Unity中UGUI的Button动态绑定引用问题 问题代码修改代码如下总结 问题代码 Button动态绑定几个连续的按钮事件时使用for循环的i做按钮的id发现按钮点击对应不上。如下代码 for (int i 0; i < 10; i) {btn[i].onClick.AddListener(() >{Click(i);}); }/// <summary&…

SQL中的窗口函数

1.窗口函数简介 窗口函数是SQL中的一项高级特性&#xff0c;用于在不改变查询结果集行数的情况下&#xff0c;对每一行执行聚合计算或者其他复杂的计算&#xff0c;也就是说窗口函数可以跨行计算&#xff0c;可以扫描所有的行&#xff0c;并把结果填到每一行中。这些函数通常与…

SpringBoot(Ⅱ)——@SpringBootApplication注解+自动装配原理+约定大于配置

1. SpringBootApplication注解 SpringBootApplication标注在某个类上说明这个类是SpringBoot的主配置类&#xff0c;SpringBoot就通过运行这个类的main方法来启动SpringBoot应用&#xff1b; 并且Configuration注解中也有Component注解&#xff0c;所以这个主启动类/主配置类…

音视频入门知识(二)、图像篇

⭐二、图像篇 视频基本要素&#xff1a;宽、高、帧率、编码方式、码率、分辨率 ​ 其中码率的计算&#xff1a;码率(kbps)&#xff1d;文件大小(KB)&#xff0a;8&#xff0f;时间(秒)&#xff0c;即码率和视频文件大小成正比 YUV和RGB可相互转换 ★YUV&#xff08;原始数据&am…