【问题标题】:PIL converting from I;16 to JPEG produce white imagePIL 从 I;16 转换为 JPEG 产生白色图像
【发布时间】:2019-07-09 15:41:10
【问题描述】:

我在使用 PIL 将图像 I;16 转换为 JPEG 时遇到问题。 我的原始图像可以在here 找到(作为泡菜)。 原始图像来自 DICOM 文件。 这是要尝试的代码:

import pickle
import matplotlib.pyplot as plt
from PIL import Image

ims = pickle.load(open("pixel_array.pickle", "rb"))

img = Image.fromarray(ims)
print(img.mode)
rgb_im = img.convert("RGB")
print(rgb_im.mode)

fig, ax = plt.subplots(figsize=(20, 10))
ax.imshow(rgb_im, cmap=plt.cm.bone)
fig.show()

不幸的是,图像完全是白色的,而应该是胸部 X 光扫描图像。

我关注了 this 其他 stackoverflow 问题,并提出了以下问题

ims = pickle.load(open("pixel_array.pickle", "rb"))

img = Image.fromarray(ims)
print(img.mode)

img.mode = 'I'
rgb_im = img.point(lambda i:i*(1./256)).convert('L')
rgb_im.save('my.jpeg')

fig, ax = plt.subplots(figsize=(20, 10))
ax.imshow(rgb_im, cmap=plt.cm.bone)
fig.show()

我能够可视化图像,但不幸的是my.jpeg 是黑色图像。请帮忙!

【问题讨论】:

    标签: python python-imaging-library jpeg tiff


    【解决方案1】:

    您的值是 16 位的,需要减少到 8 位才能显示。您可以使用以下方法将它们从当前的 2,712(即ims.min())范围扩展到 4,328(即ims.max()):

    from PIL import Image
    import numpy as np
    import pickle
    
    # Load image
    ims = pickle.load(open("pixel_array.pickle", "rb"))
    
    # Normalise to range 0..255
    norm = (ims.astype(np.float)-ims.min())*255.0 / (ims.max()-ims.min())
    
    # Save as 8-bit PNG
    Image.fromarray(norm.astype(np.uint8)).save('result.png') 
    

    【讨论】:

    • 你拯救了我的一天!英雄
    • @Mark:- 有没有办法以 16 位显示? (不是 8 位)
    • @Sanjiv 我从来没有真正追求过,也许看看这里en.m.wikipedia.org/wiki/Comparison_of_image_viewers
    • @MarkSetchell :- Mark 你能帮帮我吗:- https://stackoverflow.com/questions/59798243/does-pil-imageenhance-library-supports-16-bit-jpg-images
    • @Sanjiv 据我所知,我已经对您的问题发表了评论。
    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多