setPixmap导致进程以退出代码1完成

问题描述 投票:-1回答:1

我从功能(find_defects)返回图像。而且我看到它是有效的图像。

image which i want to show

我使用return检查cv2.imshow之前的图像,这也与我期望的一样。但是,当我尝试在使用PyQt设计的GUI上显示此图像时,会看到此错误:

Process finished with exit code 1

编辑:最小可复制示例:

from PyQt5.QtCore import *
import cv2
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *


class first_GUI(QMainWindow):
    def __init__(self):
        # super(first_GUI, self).__init__()
        # super().__init__()
        QMainWindow.__init__(self)
        self.frame_defects = cv2.imread('output.jpg')
        self.image_item = QGraphicsPixmapItem()
        scene = QGraphicsScene(self)
        scene.addItem(self.image_item)
        self.view = QGraphicsView(scene, self)
        pushButton_show = QPushButton("Show")
        pushButton_show.setMinimumHeight(40)
        pushButton_show.setStyleSheet("font-weight: bold; font-size: 16pt")
        pushButton_show.clicked.connect(self.show_image)
        vertical_layout = QVBoxLayout()
#        vertical_layout.addWidget(self.label_text)
        vertical_layout.addWidget(pushButton_show)
        self.setLayout(vertical_layout)
        self.setWindowTitle("PyQt5 first GUI")
        self.resize(400, 300)


    def show_image(self):

        image = QImage(self.frame_defects, self.frame_defects.shape[1], self.frame_defects.shape[0],
                       self.frame_defects.shape[1], QImage.Format_RGB888)
        self.image_item.setPixmap(QPixmap.fromImage(image))
        self.view.fitInView(self.image_item)

app = QApplication([])
widget = first_GUI()
widget.show()
app.exec_()

image:

“

python opencv pyqt qt-designer
1个回答
0
投票

考虑使用QGraphicsView代替标签。

# Create scene
self.image_item = QGraphicsPixmapItem()
scene = QGraphicsScene(self)
scene.addItem(self.image_item)

# Create GraphicView display
self.view = QGraphicsView(scene, self)
image = QImage(self.frame_defects, self.frame_defects.shape[1], self.frame_defects.shape[0], self.frame_defects.shape[1], QImage.Format_RGB888)
self.image_item.setPixmap(QPixmap.fromImage(image))
self.view.fitInView(self.image_item)

还要注意self.frame_defects的dtype是'uint8',如果您未在QImage构造函数中指定bytesperline参数,它将被转换为'uint32'或'int32'。因此,为了保持图像每行的字节数,我使用了不同的QImage构造函数:

QImage(self.frame_defects, self.frame_defects.shape[1], self.frame_defects.shape[0], self.frame_defects.shape[1], QImage.Format_RGB888)

希望这可以解决您的问题,让我知道!

© www.soinside.com 2019 - 2024. All rights reserved.