我在Qt标签的表格上显示图像时遇到了一些问题...&#39; b&#39;是我传递给构造函数的图像,当我在构造函数中显示它时图像显示但是当我在标签中设置它时,我仍然得到没有图像的表单。它都显示任何错误。< / p>
def on_clicked_micro(self):
self.obj3=MyForm2(b=self.blur)
self.obj3.show()
self.hide()
class MyForm2(QtGui.QMainWindow,Ui_image3):
def __init__(self,parent=None,b=None):
QtGui.QMainWindow.__init__(self,parent)
self.imgPreProc=imagePreProcessor()
cv2.imshow('blur',b) #############displaying the image #############
self.label = QtGui.QLabel(self)
self.setupUi(self)
self.label.setPixmap(QtGui.QPixmap(b))
答案 0 :(得分:2)
变量类型b
从cv2.imread('picture.bmp')
返回。类QtGui.QPixmap
是按文件名(或路径)传递图像而不是cv对象。它应该不显示它。
它有可能以两种方式修复它们;
1)您使用设置数组数据,宽度和高度(转换它的示例,您可以阅读this答案或this博客)在QtGui.QImage
中转换它们。并使用QPixmap QPixmap.fromImage (QImage image, Qt.ImageConversionFlags flags = Qt.AutoColor)转换为QtGui.QPixmap
。并使用相同的方法在QtGui.QLabel
中加载它。并且不要忘记设置QtGui.QLabel
的布局和大小。如果您在QtGui.QLabel
传递的图像非常小。我将无法看到它们。
class MyForm2(QtGui.QMainWindow,Ui_image3):
def __init__(self,parent=None,b=None):
QtGui.QMainWindow.__init__(self,parent)
self.imgPreProc=imagePreProcessor()
cv2.imshow('blur',b)
self.label = QtGui.QLabel(self)
self.setupUi(self)
myQImage = self.imageOpenCv2ToQImage(b)
self.label.setPixmap(QtGui.QPixmap.fromImage(myQImage))
def imageOpenCv2ToQImage (self, cv_img):
height, width, bytesPerComponent = cv_img.shape
bytesPerLine = bytesPerComponent * width;
cv2.cvtColor(cv_img, cv2.CV_BGR2RGB, cv_img)
return QtGui.QImage(cv_img.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888)
2)添加变量path image file name
以直接在构造函数中将图像传递给QtGui.QPixmap
。比解决No.1更容易。并且不要忘记设置QtGui.QLabel
的布局和大小。
class MyForm2(QtGui.QMainWindow,Ui_image3):
def __init__(self, pathFileName, parent = None):
QtGui.QMainWindow.__init__(self, parent)
self.imgPreProc = imagePreProcessor()
cv2.imshow('blur', cv2.imread(pathFileName))
self.label = QtGui.QLabel(self)
self.setupUi(self)
self.label.setPixmap(QtGui.QPixmap(pathFileName))