【Python学习】使用PyQt和OpenCV写一个打开图片并显示的窗口

这段代码是一个使用PyQt5和OpenCV实现的简单图像查看器。它创建了一个名为MainWindow的类,继承自QMainWindow。在初始化函数中,设置了窗口标题、大小,并添加了一个按钮用于打开图片。同时,还创建了两个文本编辑框用于显示分数和详细信息,以及一个标签用于显示图片。 按钮的点击事件连接到open_image函数,该函数使用QFileDialog选择一张图片文件,然后使用OpenCV读取图片数据。如果成功读取到图片数据,将其转换为QImage格式,并将其设置为标签的像素映射。 最后,在主函数中创建了一个QApplication实例和一个MainWindow实例,并显示窗口。程序运行后,用户可以通过点击按钮来打开并查看图片。

这个窗口的进一步作用是进行深度学习图像分类的结果展示窗口

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialog, QLabel, QWidget, QGridLayout
from PyQt5.QtGui import QPixmap, QImage
import PyQt5.QtWidgets as wid
from PyQt5.QtCore import Qt
import cv2

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("OpenCV Image Viewer")
        self.resize(640, 500)

        self.button = QPushButton("打开图片", self)
        #self.button.setGeometry(10, 10, 30, 10)
        self.button.clicked.connect(self.open_image)
        
        self.textScore = wid.QTextEdit("", self)
        self.textDetail = wid.QTextEdit("", self)

        self.button.setFixedHeight(50)
        self.button.setFixedWidth(70)
        self.textScore.setFixedHeight(50)
        self.textDetail.setFixedHeight(50)
        
        self.label = QLabel(self)
        self.label.setFixedSize(640, 480)
        self.label.setStyleSheet("border: 2px solid black; border-radius: 5px;")
        self.label.setAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop)

        layout = QGridLayout()
        layout.addWidget(self.button, 0, 0, 1, 1)
        layout.addWidget(self.textScore, 0, 1, 1, 2)
        layout.addWidget(self.textDetail, 0, 3, 1, 2)
        layout.addWidget(self.label, 1, 0, 1, 5)

        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

    def open_image(self):
        options = QFileDialog.Options()
        options |= QFileDialog.ReadOnly
        file_name, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "Images (*.png *.xpm *.jpg *.bmp);;All Files (*)", options=options)
        if file_name:
            img = cv2.imread(file_name)
            if img is not None:
                height, width, channel = img.shape
                bytesPerLine = 3 * width
                qImg = QImage(img.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
                self.label.setPixmap(QPixmap.fromImage(qImg))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

这段代码是使用Python和PyQt5库编写的一个简单的图像查看器程序。它的主要功能是让用户可以通过点击按钮来打开并显示一张图片。

首先,我们导入了所需的库和模块,包括sys、PyQt5.QtWidgets、PyQt5.QtGui、cv2等。然后,我们定义了一个名为MainWindow的类,它继承自QMainWindow类。在这个类的构造函数中,我们设置了窗口的标题、大小,并创建了一个按钮、两个文本框和一个标签。按钮用于打开图片,文本框用于显示图片的详细信息,标签用于显示图片本身。

接下来,我们定义了一个名为open_image的方法,当用户点击按钮时,这个方法会被调用。在这个方法中,我们首先弹出一个文件对话框,让用户选择要打开的图片。然后,我们使用cv2库读取选中的图片,并将其转换为QImage对象。最后,我们将这个QImage对象设置为标签的pixmap,从而在窗口中显示图片。

最后,在主函数中,我们创建了一个QApplication对象和一个MainWindow对象,并显示了这个窗口。这样,当我们运行这个程序时,就可以看到一个包含“打开图片”按钮的窗口,通过点击这个按钮,可以选择并显示一张图片。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用pyqt5的QPixmap和QImage来实现这个功能。首先,你需要使用OpenCV来捕获摄像头的实时图像,并将其转换为QImage格式。然后,你可以将QImage转换为QPixmap,并将其设置到另一个label屏幕上。 以下是实现这个功能的示例代码: ```python import cv2 import numpy as np from PyQt5.QtGui import QPixmap, QImage from PyQt5.QtWidgets import QLabel # 定义一个函数来捕获摄像头图像并将其转换为QImage格式 def get_qimage(camera): ret, frame = camera.read() if ret: # 将OpenCV图像转换为QImage格式 height, width, colors = frame.shape bytes_per_line = 3 * width q_image = QImage(frame.data, width, height, bytes_per_line, QImage.Format_RGB888) # 翻转图像以便正确显示 q_image = q_image.rgbSwapped() return q_image else: return None # 创建两个label屏幕 label1 = QLabel() label2 = QLabel() # 打开摄像头 camera = cv2.VideoCapture(0) # 在label1上显示摄像头图像 q_image = get_qimage(camera) pixmap = QPixmap.fromImage(q_image) label1.setPixmap(pixmap) # 在label2上显示截取的图像 q_image = get_qimage(camera) cropped_image = q_image.copy(200, 100, 300, 200) # 截取图像的一部分 pixmap = QPixmap.fromImage(cropped_image) label2.setPixmap(pixmap) # 显示窗口 label1.show() label2.show() ``` 这段代码首先创建了两个label屏幕,然后打开了摄像头并在label1上显示实时图像。接下来,它捕获了摄像头图像并将其转换为QImage格式,然后截取了图像的一部分并在label2上显示。最后,它显示了两个label屏幕。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值