gpt4 book ai didi

python - 如何将 dtype(uint16) 数据转换为 16 位 png 图像?

转载 作者:太空狗 更新时间:2023-10-30 02:36:13 28 4
gpt4 key购买 nike

我正在尝试使用 RSA 算法加密和解密图像。为此,我需要将图像读取为灰度,然后应用键并将 uint16 类型数组保存为 png 或支持 16 位数据的任何图像格式。然后我需要读取 16 位数据并将其转换为数组并进行解密。现在,以前我尝试将图像保存为 .tif,当我用

阅读它时
img = sk.imread('image.tiff', plugin = 'tifffile')

它将图像视为 RGB,这不是我想要的。现在我想将 uint16 类型数组保存为 16 位 png 图像,该图像将取 0 到 65536 之间的值,然后将其作为 uint16 类型数据再次读取。我尝试使用

将值保存到 16 位 png 文件
img16 = img.astype(np.uint16)
imgOut = Image.fromarray(img16)
imgOut.save('en.png')

这给了我这个错误:OSError: cannot write mode I;16 as PNG

我也尝试过 imgOut = Image.fromarray(img16, 'I') 但这会导致 没有足够的图像数据

请帮我将16位数据保存成.png图片。谢谢你。

最佳答案

有几种可能性...

首先,使用imageio写一个16位的PNG:

import imageio
import numpy as np

# Construct 16-bit gradient greyscale image
im = np.arange(65536,dtype=np.uint16).reshape(256,256)

# Save as PNG with imageio
imageio.imwrite('result.png',im)

然后您可以从磁盘读回图像并将第一个像素更改为中灰色 (32768),如下所示:

# Now read image back from disk into Numpy array
im2 = imageio.imread('result.png')

# Change first pixel to mid-grey
im2[0][0] = 32768

或者,如果您不喜欢 imageio,您可以使用 PIL/Pillow 并保存 16 位 TIFF:

from PIL import Image
import numpy as np

# Construct 16-bit gradient greyscale image
im = np.arange(65536,dtype=np.uint16).reshape(256,256)

# Save as TIFF with PIL/Pillow
Image.fromarray(im).save('result.tif')

然后您可以从磁盘读回图像并将第一个像素更改为中灰色,如下所示:

# Read image back from disk into PIL Image
im2 = Image.open('result.tif')

# Convert PIL Image to Numpy array
im2 = np.array(im2)

# Make first pixel mid-grey
im2[0][0] = 32768

enter image description here


关键字:图像、图像处理、Python、Numpy、PIL、Pillow、imageio、TIF、TIFF、PNG、16 位、16 位、short、unsigned short、保存、写入。

关于python - 如何将 dtype(uint16) 数据转换为 16 位 png 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55311985/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com