我是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_())
当你调用一个方法时,你必须在它前面加上你想调用的对象。这里的对象是
self
,因此您不必简单地调用createImage(imgL, imgR)
,而必须像这样调用它self.createImage(imgL, imgR)
对于createImageRed
和createImageCyan
同样的东西作为对这个答案的注释,您仍然有未定义的名称
pathL
和pathR
,您必须在openFile*
方法和sustractBands
中用self.pathL
和self.pathR
替换它们,而不是将它们用作substractBands
的参数并最终将其与这是因为变量在默认情况下是方法的局部变量,为了能够从方法中跳出,您必须按顺序返回它们,使用attribute(我做了),或者将它们声明为全局变量
相关问题 更多 >
编程相关推荐