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

Python 如何正确地传递pathL和pathR以在opencv中加载图像?,python,opencv,Python,Opencv,我是python新手,正在使用opencv。我有一个按钮(btn_Convertir),它调用方法sustractBands,调用方法createImage,但它接收两个参数,即我使用QFileDialog加载的两个图像的路径。我想将这两个路径作为参数传递,以便使用opencv中的imread,我还想使用我的方法createImageRed和createCyan,但我总是会遇到一个错误,我如何在python中做到这一点?请帮忙 这是我的密码 import sys from PyQt4 impor

我是python新手,正在使用opencv。我有一个按钮(btn_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_())

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

如对该答案的注释所述,您仍然有未定义的名称
pathL
pathR
,您必须在
openFile*
方法和
sustractBands
中将它们替换为
self.pathL
self.pathR
,不使用它们作为
substractBands
的参数,并最终将其与

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

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

,但我总是会得到一个错误哪一个?未定义的名称createImage,将其作为参数传递的正确方式是什么?不是专家,但是既然它们是类方法,它们不应该把
self
作为第一个参数吗?我也尝试过全局变量,但它说它没有定义,我不理解这种语言我把所有方法都改为self,但我仍然有未定义的名称imgL和imgR,这是我用qfiledialog加载的两个图像的路径,在这种情况下我能做什么?