6

我目前使用 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 输入并在之后进行转换?

4

2 回答 2

7

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

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

它将它打包为一个短(2 个字节)并将其解包为一个无符号短。

于 2013-10-23T16:24:04.220 回答
2
>>> import numpy as np
>>> np.array([-20357],dtype="uint16")
array([45179], dtype=uint16)

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

打电话np.array(my_list,dtype="uint16")

于 2013-10-23T16:21:08.147 回答