如何更改图像对比度(窗口中心和宽度)并在 QLabel 中显示(Python3.5,Qt5.1)

Posted

技术标签:

【中文标题】如何更改图像对比度(窗口中心和宽度)并在 QLabel 中显示(Python3.5,Qt5.1)【英文标题】:How to change the image contrast (window center and width) and display in QLabel(Python3.5, Qt5.1) 【发布时间】:2018-10-02 11:17:33 【问题描述】:

我需要根据窗口中心和窗口宽度调整图像对比度,然后在QLabel中显示。目前代码为:(下面代码中的'self'是继承自QLabel的子类,函数'qimage2ndarray.gray2qimage'用于将python变量(disImg)变为QT变量(QImg))

self.contrast['center']=-71
self.contrast['width']=800
disImg = (self.originalImg-self.contrast['center'])/self.contrast['width']+0.5
QImg = qimage2ndarray.gray2qimage(disImg)
self.setPixmap(QPixmap.fromImage(QImg))

但是,该图像只是黑色图像。

我认为可以通过将强度归一化为0~255来解决问题,喜欢:

self.contrast['center']=-71
self.contrast['width']=800
disImg = (self.originalImg-self.contrast['center'])/self.contrast['width']+0.5
# normalization to 0~255
MIN = disImg.min()
MAX = disImg.max()
normImg = (disImg-MIN)/(MAX-MIN)
normImg = normImg*255
QImg = qimage2ndarray.gray2qimage(normImg)
self.setPixmap(QPixmap.fromImage(QImg))

当我使用上面的代码时,图像可以正确显示。但是修改 self.contrast['center'] 和 self.contrast['width']

有人遇到同样的问题吗?请帮助我,并在此先感谢。 强

【问题讨论】:

【参考方案1】:

我找到了解决方案。

QLabel 聚焦在 0 ~ 255。对于显示图像,我们将小于 0 的像素设置为 0,将大于 255 的像素设置为 255。然后,QLabel 正确显示图像,并且对比度没关系。代码是:

    MIN = (2*self.contrast['center'] - self.contrast['width'])/2.0 + 0.5
    MAX = (2*self.contrast['center'] + self.contrast['width'])/2.0 + 0.5
    dFactor = 255.0/(MAX-MIN)
    disImg = (self.originalImg - MIN)*dFactor
    disImg[disImg<0] = 0
    disImg[disImg>255] = 255
    QImg = qimage2ndarray.gray2qimage(disImg)
    self.setPixmap(QPixmap.fromImage(QImg))

【讨论】:

以上是关于如何更改图像对比度(窗口中心和宽度)并在 QLabel 中显示(Python3.5,Qt5.1)的主要内容,如果未能解决你的问题,请参考以下文章

如何根据屏幕宽度更改图像路径?

图像 <a> 垂直和水平对齐中心并在两者中都使用 % 调整大小

Dicom Toolkit (DCMTK) - 如何获取窗口中心和宽度

仅当宽度和高度都更改时才更改图像大小

如何更改图像源,在 GUI 中显示并在之后运行一些代码? [复制]

随着窗口大小的变化,如何在wpf中动态测量网格宽度/高度