【发布时间】:2020-01-31 15:03:31
【问题描述】:
我从函数 (find_defects) 返回一个图像。我看到它是一个有效的图像。
我在return 之前使用cv2.imshow 检查图像,这也符合我的预期。但是,当我尝试在使用 PyQt 设计的 GUI 上显示此图像时,我看到此错误:
Process finished with exit code 1
编辑:最小可重现示例:
from PyQt5.QtCore import *
import cv2
from PyQt5.QtWidgets import QLabel, QWidget, QPushButton, QVBoxLayout, QApplication
from PyQt5.QtGui import QPixmap, QImage
class first_GUI(QWidget):
def __init__(self):
# super(first_GUI, self).__init__()
# super().__init__()
QWidget.__init__(self)
self.frame_defects = cv2.imread('output.jpg')
self.label_text = QLabel("Hi")
self.label_text.setAlignment(Qt.AlignCenter)
self.label_text.setStyleSheet("color: rgb(0,0,255);font-weight: bold; font-size: 16pt")
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):
if self.frame_defects is not None:
image = QImage(self.frame_defects, self.frame_defects.shape[1], self.frame_defects.shape[0],
QImage.Format_RGB888) # The image is stored using a 24-bit RGB format (8-8-8).
self.pixmap2 = QPixmap.fromImage(image)
self.label.setPixmap(self.pixmap2)
app = QApplication([])
widget = first_GUI()
widget.show()
app.exec_()
图片:
【问题讨论】:
-
这张图片很难阅读。请改为复制并粘贴代码
-
还要在
if ...之前添加self.pixmap2 = QPixmap() -
@Mustafa 请使用
@username。将image = QImage(...)更改为h, w, ch = self.frame_defects.shapebytesPerLine = ch * wimage = QImage(self.frame_defects.data, w, h, bytesPerLine, QImage.Format_RGB888).rgbSwapped() -
@Mustafa 或更改为
self.frame_defects = self.frame_defects[:,:,::-1]h, w, ch = self.frame_defects.shape bytesPerLine = ch * w image = QImage(self.frame_defects.data, w, h, bytesPerLine, QImage.Format_RGB888) -
OpenCV 默认使用 BGR 格式,但 Qt 使用 RGB,所以蓝色会显示为红色,反之亦然,所以必须将 R 与 B 交换。