PyQt5学习笔记--基于Qt Designer和Opencv生成灰度图GUI

该博客介绍了如何利用Python的PyQt5库和OpenCV库来显示图片,并展示了从BGR到灰度图的转换过程。通过QtDesigner设计UI,使用QLabel和QGraphicsView两种方式实现图片展示,提供了详细代码实现。
摘要由CSDN通过智能技术生成

目录

1--基于Qt Designer设计ui文件

2--源代码

3--结果展示

4--补充

5--参考


1--基于Qt Designer设计ui文件

2--源代码

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import uic
import cv2

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.ui = uic.loadUi("./Qlabel.ui")  # 加载由Qt Designer设计的ui文件
        self.Qlabel1 = self.ui.label # 加载Qlabel属性
        self.img_btn1 = self.ui.pushButton # 加载pushButton属性
        self.Qlabel2 = self.ui.label_2
        self.img_btn2 = self.ui.pushButton_2

        # img_btn1 绑定槽函数 loadImage()
        self.img_btn1.clicked.connect(self.loadImage)

        # img_btn2 绑定槽函数 gen_gray()
        self.img_btn2.clicked.connect(self.gen_gray)

    def loadImage(self):  # 选择label展示的图片
        # 弹窗导入图片文件
        self.file_name, _ = QFileDialog.getOpenFileName(self.ui, '打开文件', '.', '图像文件(*.jpg *.png)')

        self.Qlabel1.setScaledContents(True)  # 让图片自适应 label 大小
        self.Qlabel1.setPixmap(QPixmap(self.file_name)) # label 显示图片


    def gen_gray(self):
        img = cv2.imread(self.file_name)  # opencv读取图片
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # BGR转换为灰度图

        # data, w, h, format
        frame = QImage(gray.data, gray.shape[1], gray.shape[0], gray.strides[0], QImage.Format_Indexed8)
        self.Qlabel2.setScaledContents(True)  # 让图片自适应 label 大小
        self.Qlabel2.setPixmap(QPixmap(frame))  # label 显示图片

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWindow()
    w.ui.show()
    app.exec_()

3--结果展示

① 运行程序:

② 导入图片:

③ 生成灰度图:

4--补充

①上述代码使用Qlabel显示图片,可能存在不方便之处,下面展示用QGraphicsView显示图片的修改代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import uic
import cv2

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.ui = uic.loadUi("./QGraphicsView.ui")  # 加载由Qt Designer设计的ui文件
        self.QGraphView1 = self.ui.graphicsView # 加载graphicsView属性
        self.img_btn1 = self.ui.pushButton  # 加载pushButton属性
        self.QGraphView2 = self.ui.graphicsView_2
        self.img_btn2 = self.ui.pushButton_2

        # img_btn1 绑定槽函数 loadImage()
        self.img_btn1.clicked.connect(self.loadImage)

        # img_btn2 绑定槽函数 gen_gray()
        self.img_btn2.clicked.connect(self.gen_gray)

    def loadImage(self):  # 选择label展示的图片
        # 弹窗导入图片文件
        self.file_name, _ = QFileDialog.getOpenFileName(self.ui, '打开文件', '.', '图像文件(*.jpg *.png)')

        pix = QPixmap(self.file_name)
        item = QGraphicsPixmapItem(pix)  # 创建像素图元
        scene = QGraphicsScene()  # 创建场景
        scene.addItem(item)
        self.QGraphView1.setScene(scene)  # 将场景添加至视图

        self.QGraphView1.fitInView(item) # 自适应大小

    def gen_gray(self):
        img = cv2.imread(self.file_name)  # opencv读取图片
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # BGR转换为灰度图

        # data, w, h, format
        frame = QImage(gray.data, gray.shape[1], gray.shape[0], gray.strides[0], QImage.Format_Indexed8)
        pix = QPixmap.fromImage(frame)
        item = QGraphicsPixmapItem(pix)  # 创建像素图元
        scene = QGraphicsScene()  # 创建场景
        scene.addItem(item)
        self.QGraphView2.setScene(scene)  # 将场景添加至视图

        self.QGraphView2.fitInView(item)  # 自适应大小

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWindow()
    w.ui.show()
    app.exec_()

② 结果展示:

5--参考

pyqt5-qimage与opencv互转

pyqt显示图片的两种方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值