【问题标题】:Show an OpenCV image with PyQt5 [duplicate]使用 PyQt5 显示 OpenCV 图像 [重复]
【发布时间】:2019-12-03 21:33:16
【问题描述】:

我正在学习使用pyqt5qt designer,我很困惑。

我的目标是在单击按钮时显示图片,因为将来我想将所有这些与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

但是现在,当我用我的 Pycharm 运行它时,它在 import noe_rc 中崩溃了。如果我发表评论,图像不会出现。

PS:如果我对导入进行评论,imagen 函数运行良好,但图像会出现在新窗口中。

【问题讨论】:

  • 什么“崩溃”,PyCharm 还是程序?有任何错误信息吗? noe_rc是pyrcc5生成的文件吗?

标签: python opencv pyqt pyqt5 qt-designer


【解决方案1】:

要显示 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_())

使用此示例图像,

【讨论】:

  • 我的输出有问题,它只是行 - 空白和白色。所以,我删除了rgbSwapped() 并将Format_RGB888 更改为Format_ARGB32。谢谢你的回答。这个答案是救命稻草。谢谢一百万。
  • 我的意思是,这种格式Format_RGBA8888_Premultiplied
  • 我的图片有正确的颜色,但是倾斜了我根据that的答案在QtGui.QImage.Format_RGB888之前添加了self.image.strides[0]
  • 为什么不使用没有 rgbSwapped() 的 Format_BGR888
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2021-01-11
  • 2017-05-29
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多