pyqt5:槽函数传参/opencv图像转化QPixmap和QImage/使用函数方法读取图片

发布时间 2023-06-28 10:03:18作者: Aneverforget

1、opencv读取图像转化QPixmap和QImage:

类的方法:

    def cvimg_to_pixmap(self,cvimg):#少了个self,报错Process finished with exit code -1073740791 (0xC0000409)
        height, width, depth = cvimg.shape
        cvimg = cv2.cvtColor(cvimg, cv2.COLOR_BGR2RGB)
        cvimg = QtGui.QImage(cvimg.data, width, height, width * depth, QtGui.QImage.Format_RGB888)#转换成QImage
        cvimg = QtGui.QPixmap(cvimg).scaled(cvimg.width(), cvimg.height())#转换成QPixmap
        return cvimg

  2、pyqt 仅使用函数方法读取图片:

槽函数传参,采用匿名函数方法:

btn.clicked.connect(lambda: show_pic(imgW))#槽函数传参

如下面代码示例:

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


def cvimg_to_pixmap(cvimg):
    height, width, depth = cvimg.shape
    cvimg = cv2.cvtColor(cvimg, cv2.COLOR_BGR2RGB)
    cvimg = QtGui.QImage(cvimg.data, width, height, width * depth, QtGui.QImage.Format_RGB888)  # 转换成QImage
    cvimg = QtGui.QPixmap(cvimg).scaled(cvimg.width(), cvimg.height())  # 转换成QPixmap
    return cvimg
def mn():
    app = QtWidgets.QApplication(sys.argv)
    win=QtWidgets.QWidget()
    win.setWindowTitle("PyQt")#设置窗口title

    btn=QtWidgets.QPushButton(win)
    btn.setText("打开图片")
    btn.setGeometry(QtCore.QRect(80, 160, 131, 23))
    btn.setObjectName("pushButton")
    imgW = QtWidgets.QLabel(win)
    imgW.move(250, 20)
    imgW.resize(150, 150)  # 重设Label大小
    imgW.setScaledContents(True)  # 设置图片自适应窗口大小
    btn.clicked.connect(lambda: show_pic(imgW))#槽函数传参

    win.show()  # show 窗口
    sys.exit(app.exec_())
def show_pic(imgW):
    # pixmap=QtGui.QPixmap('D:/project/project/line_detect/resources/black_line.png')
    # imgW.setPixmap(pixmap)
    img = cv2.imread('D:\project\project\line_detect/resources/black_line.png')
    img = cvimg_to_pixmap(img)
    imgW.setPixmap(img)

if __name__=='__main__':
    mn()