Python 如何正确地传递pathL和pathR以在opencv中加载图像?
我是python新手,正在使用opencv。我有一个按钮(btn_Convertir),它调用方法sustractBands,调用方法createImage,但它接收两个参数,即我使用QFileDialog加载的两个图像的路径。我想将这两个路径作为参数传递,以便使用opencv中的imread,我还想使用我的方法createImageRed和createCyan,但我总是会遇到一个错误,我如何在python中做到这一点?请帮忙 这是我的密码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
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加载的两个图像的路径,在这种情况下我能做什么?