如何在python中获得16位无符号整数

时间:2013-10-23 16:12:20

标签: python integer python-imaging-library bit unsigned

我目前使用python PIL读取图像中的像素。这些像素为16位灰度,无符号。但是,每当PIL读取它们时,它都会认为它们已经签名并且将 45179 之类的值设置为 -20357

org_Image = Image.open(image)
org_Data = org_Image.load()
width, height = org_Image.size

    for y in range(0, height):
        temprow_data = []
        for x in range(0, width):
             temprow_data.append(org_Data[x, y])

如何让PIL输出无符号而不是有符号整数?或者有一种非常简单的方法来获取PIL输入并在之后进行转换吗?

2 个答案:

答案 0 :(得分:4)

这是一个带结构的解决方案,因为我不知道python是如何二进制代表负数的。

import struct
struct.unpack('H', struct.pack('h', number))

它将它打包为短(2个字节)并将其解压缩为无符号短消息。

答案 1 :(得分:3)

>>> import numpy as np
>>> np.array([-20357],dtype="uint16")
array([45179], dtype=uint16)

在你的情况下完成所有内容的循环并将其放在列表中

只需致电np.array(my_list,dtype="uint16")