第一题
创建一个 PyQt 应用程序,该应用程序能够:
1.使用 OpenCV 加载一张图像。
2.在 PyQt 的窗口中显示这张图像。
3.提供四个按钮(QPushButton):
- 一个用于将图像转换为灰度图
- 一个用于将图像恢复为原始彩色图
- 一个用于将图像进行翻转
- 一个用于将图像进行旋转
4.当用户点击按钮时,相应地更新窗口中显示的图像。
思路分析:
- 创建 PyQt 应用程序:
- 使用
QApplication
初始化应用程序。- 创建一个主窗口
QMainWindow
或QWidget
。- 加载和显示图像:
- 使用 OpenCV 加载图像。
- 将 OpenCV 的图像格式转换为 Qt 可以显示的格式(QImage)。
- 使用
QLabel
显示图像。- 创建按钮并添加功能:
- 使用
QPushButton
创建四个按钮,每个按钮对应一个图像处理操作。- 将按钮添加到布局中。
- 连接按钮的点击信号到相应的槽函数。
- 图像处理:
- 编写槽函数来处理按钮点击事件,执行相应的图像处理操作。
- 更新
QLabel
上显示的图像。- 更新显示:
- 在槽函数中,每次图像处理后,更新
QLabel
的图像显示。
涉及到的函数及方法:
cv2
相关
cv2.imread(filepath, flags=cv2.IMREAD_COLOR)
:- 功能:读取图像文件。
- 参数:
filepath
:图像文件的路径。flags
:指定读取图像的方式(例如,彩色图像、灰度图像等)。
- 返回值:图像数据,通常是一个 NumPy 数组。
cv2.cvtColor(src, code)
:- 功能:转换图像从一个颜色空间到另一个。
- 参数:
src
:源图像。code
:转换代码(例如,从 BGR 到 RGB,从 BGR 到灰度等)。
- 返回值:转换后的图像。
cv2.flip(src, flipCode)
:- 功能:翻转图像。
- 参数:
src
:源图像。flipCode
:翻转方式(例如,水平翻转、垂直翻转等)。
- 返回值:翻转后的图像。
PyQt6
相关
uic.loadUi(ui_file, baseinstance)
:- 功能:从指定的 UI 文件加载界面,并将其设置到
baseinstance
中。 - 参数:
ui_file
:UI 文件的路径。baseinstance
:一个 QWidget 或其子类实例,用于加载 UI。
- 功能:从指定的 UI 文件加载界面,并将其设置到
QImage(data, width, height, bytes_per_line, format)
:- 功能:创建一个 QImage 对象。
- 参数:
data
:图像数据的指针。width
:图像的宽度。height
:图像的高度。bytes_per_line
:每行的字节数。format
:图像格式。
QPixmap.fromImage(image)
:- 功能:从 QImage 对象创建一个 QPixmap 对象。
- 参数:
image
:QImage 对象。
QLabel.setPixmap(pixmap)
:- 功能:设置 QLabel 的图像。
- 参数:
pixmap
:QPixmap 对象。
QLabel.setScaledContents(True)
:- 功能:使 QLabel 根据其内容自动调整大小。
源码如下:
import cv2
from PyQt6 import uic
from PyQt6.QtGui import QImag