我正在使用matplotlib和pyqt5开发一个用于图像处理的应用程序。这是一些代码:
class MainForm(QtWidgets.QMainWindow):
def __init__(self):
super(MainForm, self).__init__()
uic.loadUi("...", self)
self.setup_ui_elements()
self.figure = Figure(figsize=(5, 4), dpi=100)
self.canvas = FigureCanvas(self.figure)
self.toolbar = NaviToolbar(self.canvas, self)
self.MiddleRightLayout.addWidget(self.toolbar)
self.MiddleRightLayout.addWidget(self.canvas)
def plot(self, img):
self.figure.figimage(img)
self.canvas.draw()
现在,如果我加载图像并将其绘制到画布上,则会出现两个问题:
有什么想法吗?
迎接,丹尼斯
答案 0 :(得分:0)
将figimage
直接放在没有轴的画布上。这意味着它不会自动缩放到画布或其他任何内容,这也意味着缩放和平移工具没有任何效果。
您可以使用resize
参数来图形化,self.figure.figimage(img, resize=True)
让画布适合图像,如果这是您想要的。否则,您可能想要使用imshow
图。
为了使图像缩放到原始尺寸,您需要对间距进行一些处理。
import matplotlib.pyplot as plt
import numpy as np
def plot(self, img):
self.ax = self.figure.add_subplot(111)
self.figure.subplots_adjust(.1,.1,.9,.9) # 10% margin around image
h, w = np.array(img.shape[:2])/self.figure.dpi
self.figure.set_size_inches(w/0.8,h/0.8)
self.ax.imshow(img)
self.ax.axis("off") # in case you want to turn the axes off
self.canvas.draw()