【问题标题】:How to show image to PYQT with opencv如何使用 opencv 向 PYQT 显示图像
【发布时间】:2018-10-18 07:54:16
【问题描述】:

您好,我是 python 和 opencv 的新手

我想问,如何在 qlabel (pyqt) 中显示我的图像,我想将 qlabel 转换为灰度。

import sys
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog
import cv2
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class UIProgram(QMainWindow):
def __init__(self):
    super(UIProgram,self).__init__()
    loadUi("Backpro2.ui",self)
    #self.image=None
    self.trainLoadImgBtn.clicked.connect(self.loadClicked)
    self.image = QImage()
@pyqtSlot()
def loadClicked(self):
    fname,filter=QFileDialog.getOpenFileName(self,'Open File','D:\\',"Image Files(*.jpg)")
    if fname:
        self.loadImage(fname)
    else:
        print('invalid image')

def loadImage(self,fname):
    self.image=cv2.imread(fname,cv2.IMREAD_COLOR)
    self.displayImage()

def displayImage(self):
    qformat =QImage.Format_Indexed8

    if len(self.image.shape)==3:
        if(self.image.shape[2])==4:
            qformat=QImage.Format_RGBA8888
        else:
            qformat=QImage.Format_RGB888
        img=QtGui.QImage(self.image.data,self.image.shape[1],self.image[0],QtGui.QImage.Format_RGB888)

        img = img.rgbSwapped()
        self.trainOpenImg.setPixmap(QPixmap.fromImage(img))
        self.trainOpenImgn.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter)



if __name__ == "__main__":

app=QApplication(sys.argv)
window=UIProgram()
window.setWindowTitle('Test')
window.show()
sys.exit(app.exec_())

当我点击加载图片按钮时它崩溃了,图片无法在 qlabel 中显示 还有这个错误

进程以退出代码 -1073740791 (0xC0000409) 结束

【问题讨论】:

    标签: python opencv pyqt5 pyside


    【解决方案1】:

    它有 2 个错误:

    • 您必须将 bytesPerLine 传递给 QImage
    • 设置对齐方式时,trainOpenImg 中有一个“n”个以上。

    def displayImage(self):
        qformat =QImage.Format_Indexed8
        if len(self.image.shape)==3:
            if self.image.shape[2] ==4:
                qformat=QImage.Format_RGBA8888
            else:
                qformat=QImage.Format_RGB888
            img = QtGui.QImage(self.image.data,
                self.image.shape[1],
                self.image.shape[0], 
                self.image.strides[0], # <--- +++
                qformat)
            img = img.rgbSwapped()
            self.trainOpenImg.setPixmap(QPixmap.fromImage(img))
            self.trainOpenImg.setAlignment(QtCore.Qt.AlignCenter)
    

    另一方面,IDE 在处理某些类型的错误时会遇到问题,只能启动代码,因此在这些情况下,建议在 CMD 或终端中运行它,因为它们会为您提供更多信息,例如在这种情况下,错误消息是:

    Traceback (most recent call last):
      File "test.py", line 20, in loadClicked
        self.loadImage(fname)
      File "test.py", line 26, in loadImage
        self.displayImage()
      File "test.py", line 36, in displayImage
        img=QtGui.QImage(self.image.data,self.image.shape[1],self.image[0],QtGui.QImage.Format_RGB888)
    TypeError: arguments did not match any overloaded call:
      QImage(): too many arguments
      QImage(QSize, QImage.Format): argument 1 has unexpected type 'memoryview'
      QImage(int, int, QImage.Format): argument 1 has unexpected type 'memoryview'
      QImage(bytes, int, int, QImage.Format): argument 3 has unexpected type 'numpy.ndarray'
      QImage(sip.voidptr, int, int, QImage.Format): argument 3 has unexpected type 'numpy.ndarray'
      QImage(bytes, int, int, int, QImage.Format): argument 3 has unexpected type 'numpy.ndarray'
      QImage(sip.voidptr, int, int, int, QImage.Format): argument 3 has unexpected type 'numpy.ndarray'
      QImage(List[str]): argument 1 has unexpected type 'memoryview'
      QImage(str, format: str = None): argument 1 has unexpected type 'memoryview'
      QImage(QImage): argument 1 has unexpected type 'memoryview'
      QImage(Any): too many arguments
    Aborted (core dumped)
    

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 2021-12-06
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 2012-10-15
      • 2020-07-03
      • 1970-01-01
      相关资源
      最近更新 更多