Python图像转换

时间:2015-11-20 18:05:15

标签: python image python-imaging-library

我正在尝试将具有模式I(32位带符号整数像素)的模式转换为标准灰度或“' RGB'图片。问题是当我尝试转换它时,它只是一个空白的白色图像。我正在使用PIL模块。

我想要转换的图像。

enter image description here

from PIL import Image
sample_img = Image.open('sample.png') 
sample_img=sample_img.convert('L')

2 个答案:

答案 0 :(得分:1)

这对你有用吗?

from PIL import Image
import numpy as np

sample_img = Image.open('sample.png') 
rescaled = 255 * np.asarray(sample_img)/2**16
img = Image.fromarray(np.uint8(rescaled))

给出了:

>>> np.asarray(img)

array([[ 95,  96,  98, ...,  98, 105, 107],
       [ 93,  97,  99, ..., 100, 105, 108],
       [ 94,  99, 100, ..., 102, 105, 110],
       ..., 
       [130, 125, 125, ...,  97,  98, 100],
       [128, 120, 123, ...,  99,  99, 101],
       [125, 119, 120, ..., 101, 100, 101]], dtype=uint8)

这是一个'标准' 8位灰度图像。

答案 1 :(得分:1)

PIL是我曾经试图依赖的最狡猾的套餐之一。这是一个非常直接的转换,您提供的示例代码应该可以正常工作。

这是一个解决方法。

def ItoL(im):
    w, h = im.size
    result = Image.new('L', (w, h))
    pix1 = im.load()
    pix2 = result.load()
    for y in range(h):
        for x in range(w):
            pix2[x,y] = pix1[x,y] >> 8
return result