首页 > 解决方案 > 在不改变比例和平移的情况下更新 pyqtgraph ImageView 图像

问题描述

我有一个 ImageView,我想在不将显示(缩放、平移等)初始化为默认居中、非缩放视图的情况下更新图像。

我有一个更新图像像素值的过程,我希望能够在应用这些更改之前放大图像的某些区域以查看发生的局部修改。

然而,每次调用 setImage 来更新图像都会初始化图像在视图中的缩放和位置。

我尝试在更新图像之前保存 QTransform 并将此转换用作 setImage 的输入。这对生成的图像没有影响。

class myImageView(pg.ImageView):
    def __init__(self):
       ......

    def setImage(self, img, autoRange=True, autoLevels=True,
                 levels=None, axes=None, xvals=None, pos=None,
                 scale=None, transform=None, autoHistogramRange=True):
        self.min_level, self.max_level = self.ui.histogram.getLevels()
        # get the current transform
        transform = self.imageItem.transform()
        # update the image displayed
        pg.ImageView.setImage(self, img, autoRange=autoRange, autoLevels=autoLevels,
                     levels=levels, axes=axes, xvals=xvals, pos=pos,
                     scale=scale, transform=transform, autoHistogramRange=autoHistogramRange)
        # update the histogram
        self.ui.histogram.setLevels(self.min_level, self.max_level)
        # try to apply the transform to the image item
        self.imageItem.setTransform(transform)

生成的图像会自动居中并重新初始化缩放。

有没有办法保留以前的缩放和翻译并再次应用它们?

标签: pythonpyqtpyqtgraph

解决方案


您可以将 autoRange 设置为 False

image_view = pg.ImageView()
image_view.setImage(img_original)

# this will disable rescaling and translate
image_view.setImage(img_new, autoRange=False) 

文档:https ://pyqtgraph.readthedocs.io/en/latest/widgets/imageview.html#pyqtgraph.ImageView.setImage


推荐阅读