Как удалить пустое пространство вокруг изображения при его отображении в matplotlib, встроенном в графический интерфейс pyqt5

#python #matplotlib #pyqt5

#питон #matplotlib #pyqt5

Вопрос:

Я работаю над приложением на основе python, которое отображает научные одноканальные изображения TIF в графическом интерфейсе, используя pyqt5, matplotlib и opencv.

Когда я запускаю код, изображение отображается с огромным количеством пустого пространства вокруг него.

Пожалуйста, помогите мне удалить пустые места и идеально вписать изображение в область прокрутки.

 class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1138, 702)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setObjectName("widget")
        self.gridLayout = QtWidgets.QGridLayout(self.widget)
        self.gridLayout.setObjectName("gridLayout")
        self.scrollArea = QtWidgets.QScrollArea(self.widget)
        self.scrollArea.setWidgetResizable(False)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 1077, 747))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.gridLayout.addWidget(self.scrollArea, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

   
    def openImage(self):
        self.img = cv2.imread("Delta1.tif",-1)
        self.height, self.width, self.channels = self.img.shape
        print("width: ",self.width)
        print("height: ",self.height)
        self.dpiw = 100
        self.dpih = 100
        self.figsize = self.width/float(self.dpiw), self.height/float(self.dpih)
        self.fig = Figure(figsize=self.figsize)
        self.canvas = FigureCanvas(self.fig)
        self.ax = self.fig.subplots()
        self.ax.set_axis_off()
        temp_img = self.img
        self.ax.imshow(self.img, cmap="gray", vmin = 0, vmax=65535)
        self.horizontalLayout.addWidget(self.widget)
        self.scrollArea.setWidget(self.canvas)
        self.widget.layout().addWidget(self.scrollArea)
        

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    ui.openImage()
    MainWindow.show()
    sys.exit(app.exec_())


if QtCore.QT_VERSION >= 0x50501:
    def excepthook(type_, value, traceback_):
        traceback.print_exception(type, value, traceback)
        QtCore.qFatal('')
sys.excepthook = excepthook
 

введите описание изображения здесь

Комментарии:

1. Вы могли бы попробовать добавить что-то вроде self.fig.tight_layout(pad=0.0) после строки self.ax.imshow(self.img, cmap="gray", vmin = 0, vmax=65535)

2. @eyllanesc Да, это сработало отлично. Большое спасибо..

3. @eyllanesc На самом деле я новичок в matplotlib и pyqt5. Ваш ответ только что положил конец 2 дням моей борьбы за поиск ответа.