简体   繁体   中英

How to get a 16bit Unsigned integer in python

I currently read off pixels from an image using python PIL. These pixels are 16bit greyscale and are unsigned. However, whenever PIL reads them in it thinks they are signed and makes values that should be something like 45179 into -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])

How do I go about getting PIL to output unsigned instead of signed integers? Or is there a really easy way of taking the PIL input and converting it after?

Here is a solution with structs since I do not know how python represents negative numbers binarily.

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

It packs it as a short (2 bytes) and unpacks it as an unsigned short.

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

in your case when you are done looping over everything and you have it in a list

just call np.array(my_list,dtype="uint16")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM