如何正确传递pathL和pathR以在opencv中加载图像?

2024-10-01 09:39:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,正在使用opencv。我有一个按钮(btn\u Convertir)调用方法sustractBands调用方法createImage,但它接收两个参数,即我正在使用QFileDialog加载的两个图像的路径。为了使用opencv中的imread,我想把这两个路径作为参数传递,我也想使用我的方法createImageRed和createCyan,但是我总是会遇到一个错误,在python中怎么做呢?请帮忙

这是我的密码

import sys
from PyQt4 import QtGui, uic, QtCore
import cv2
import numpy as np

class Window(QtGui.QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        uic.loadUi('UI.ui', self)
        self.cb_tipos.addItems(["a", "b", "c"])
        self.show()

        self.abrir_izq.clicked.connect(self.openFileL)
        self.abrir_der.clicked.connect(self.openFileR)
        self.rb_matrices.clicked.connect(self.cambiarEstadoCombo)

        self.btn_Convertir.clicked.connect(self.sustractBands, pathL, pathR)

    def openFileL(self):
        pathL = QtGui.QFileDialog.getOpenFileName(self, "Open image","",'Images (* .jpg)')
        pixmap = QtGui.QPixmap(pathL)
        print self.im_izq.size()
        pixmap.scaled(self.im_izq.size(), QtCore.Qt.IgnoreAspectRatio, QtCore.Qt.FastTransformation)
        self.im_izq.setPixmap(pixmap)

    def openFileR(self):
        pathR = QtGui.QFileDialog.getOpenFileName(self, "Open image","",'Images (* .jpg)')
        pixmapd = QtGui.QPixmap(pathR)
        pixmapd.scaled(self.im_der.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.FastTransformation)
        self.im_der.setPixmap(pixmapd)

    def createImage(imgL, imgR):
        imgFinal = createImageRed(imgL) + createImageCyan(imgR)
        cv2.imwrite('Final.jpg', imgFinal)
        cv2.imshow("Finished", imgFinal)
        cv2.waitKey() 

    def createImageRed(imgL):
        imgL[:, :, 0] = 0
        imgL[:, :, 1] = 0
        return imgL 

    def createImageCyan(imgR):
        imgR[:, :, 2] = 0
        return imgR    

    def sustractBands(self, pathL, pathR):
        imgL = cv2.imread(pathL, cv2.IMREAD_COLOR)
        imgR = cv2.imread(pathR, cv2.IMREAD_COLOR)
        createImage(imgL, imgR)


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = Window()
    sys.exit(app.exec_())

Tags: importselfdefconnectqtcv2imqtgui
1条回答
网友
1楼 · 发布于 2024-10-01 09:39:41

当你调用一个方法时,你必须在它前面加上你想调用的对象。这里的对象是self,因此您不必简单地调用createImage(imgL, imgR),而必须像这样调用它self.createImage(imgL, imgR)对于createImageRedcreateImageCyan同样的东西

作为对这个答案的注释,您仍然有未定义的名称pathLpathR,您必须在openFile*方法和sustractBands中用self.pathLself.pathR替换它们,而不是将它们用作substractBands的参数并最终将其与

self.btn_Convertir.clicked.connect(self.sustractBands)

这是因为变量在默认情况下是方法的局部变量,为了能够从方法中跳出,您必须按顺序返回它们,使用attribute(我做了),或者将它们声明为全局变量

相关问题 更多 >