繁体   English   中英

防止自动缩放16位图像数据

[英]Preventing auto scale for 16-bit image data

当我尝试在python中保存16位图像数据时,像素值会自动缩放为65536。例如,16位数据中的最大值为1536。如果我保存并读取此数据,则最大值变为65k。 如何防止这种缩放? 我尝试了不同的映像库,包括opencv,PIL,misc,imageio,但是所有这些库都使用了这种缩放。

例如:

img_arr # let it contains 16-bit gray-scale image data
print np.amax(img_arr) # it prints 1536
cv2.imwrite(img_arr, "asd.png")
img_arr = cv2.imread("asd.png")
print np.amax(img_arr) # it prints 65k value

使用OpenCV ,这可以满足您的需求。

import cv2
import numpy as np

# Synthesize 200x200 uint16 image with 39,999 as max value
im = np.arange(0,40000,dtype=np.uint16).reshape((200,200))

# Write to disk
cv2.imwrite('result.png',im)

# Re-read from disk
rr = cv2.imread('result.png',cv2.IMREAD_UNCHANGED)

# Check maximum value
print(rr.max())                # prints 39999 

PIL / Pillow不支持16位灰度,因此您需要提升为32位带符号,如下所示:

from PIL import Image
import numpy as np

# Synthesize 32-bit signed image
im = np.arange(0,40000,dtype=np.int32).reshape((200,200)) 

# Make into PIL Image
pim = Image.fromarray(im,'I')

# Save as 16-bit PNG, or 16-bit NetPBM PGM
pim.save('result.png')
pim.save('result.pgm')

# Re-read either file for same result, namely 39999
rr = np.array(Image.open('result.pgm')).max()
rr = np.array(Image.open('result.png')).max()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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