Python 使用PyQt5显示OpenCV图像

Python 使用PyQt5显示OpenCV图像,python,opencv,pyqt,pyqt5,qt-designer,Python,Opencv,Pyqt,Pyqt5,Qt Designer,我正在学习使用pyqt5和qt设计器,我很困惑 我的目标是在单击按钮时显示一张图片,因为将来我想将所有这些与opencv结合起来 现在我有了一个带有按钮和图像的窗口(它是一个标签) 从.ui到.py的转换代码: class Ui_MainWindow(object): def setupUi(self, MainWindow): # Omitted code self.pushButton.clicked.connect(self.imagen)

我正在学习使用
pyqt5
qt设计器
,我很困惑

我的目标是在单击按钮时显示一张图片,因为将来我想将所有这些与
opencv
结合起来

现在我有了一个带有按钮和图像的窗口(它是一个标签)

.ui.py的转换代码:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):

        # Omitted code
        self.pushButton.clicked.connect(self.imagen)


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "PROG PRUEBAS QT"))
        self.pushButton.setText(_translate("MainWindow", "Escala de grises"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><img src=\":/chchch/img.png\"/></p></body></html>"))

    #
    def imagen(self):
        img = cv.imread('img.png', 0)
        cv.imshow('sss', img)
        cv.imwrite('pichi.png', img)
    #

import noe_rc
class Ui\u主窗口(对象):
def设置UI(自我,主窗口):
#省略代码
self.button.clicked.connect(self.imagen)
def重新传输(自身,主窗口):
_translate=QtCore.QCoreApplication.translate
setWindowTitle(_translate(“MainWindow”、“PROG PRUEBAS QT”))
self.butdown.setText(_translate(“主窗口”、“Escala de grises”))
self.label.setText(_translate(“主窗口”,“p>”))
#
def图像(自身):
img=cv.imread('img.png',0)
简历imshow('sss',img)
简历imwrite('pichi.png',img)
#
进口无核武器
但是现在,当我用Pycharm运行它时,它在import noe_rc中崩溃。如果我发表评论,图像不会出现


PS:如果我对导入
imagen
功能进行了注释,但图像会出现在新窗口中。

要显示OpenCV图像,您必须将图像转换为
QImage
然后转换为
QPixmap
,在那里可以使用
QLabel
显示图像

from PyQt5 import QtGui, QtCore, QtWidgets
import cv2
import sys

class DisplayImageWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(DisplayImageWidget, self).__init__(parent)

        self.button = QtWidgets.QPushButton('Show picture')
        self.button.clicked.connect(self.show_image)
        self.image_frame = QtWidgets.QLabel()

        self.layout = QtWidgets.QVBoxLayout()
        self.layout.addWidget(self.button)
        self.layout.addWidget(self.image_frame)
        self.setLayout(self.layout)

    @QtCore.pyqtSlot()
    def show_image(self):
        self.image = cv2.imread('placeholder4.PNG')
        self.image = QtGui.QImage(self.image.data, self.image.shape[1], self.image.shape[0], QtGui.QImage.Format_RGB888).rgbSwapped()
        self.image_frame.setPixmap(QtGui.QPixmap.fromImage(self.image))

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    display_image_widget = DisplayImageWidget()
    display_image_widget.show()
    sys.exit(app.exec_())
使用此示例图像


什么“崩溃”,PyCharm还是程序?是否有任何错误消息?
noe_rc
是由pyrcc5生成的文件吗?我对输出有问题,它只是行-空白和白色。因此,我删除了
rgbSwapped()
,并用
格式ARGB32
更改了
格式。谢谢你的回答。这个答案是救命稻草。非常感谢。我的意思是,这种格式
格式\u RGBA8888\u预乘