我正在尝试读取以 16 位数据类型编写的 PNG 图像文件。数据应转换为 NumPy 数组。但我不知道如何读取“16位”文件。我尝试使用 PIL 和 SciPy,但它们在加载时将 16 位数据转换为 8 位数据。谁能告诉我如何从 16 位 PNG 文件读取数据并将其转换为 NumPy 数组而不更改数据类型?
以下是我使用的脚本。
from scipy import misc
import numpy as np
from PIL import Image
#make a png file
a = np.zeros((1304,960), dtype=np.uint16)
a[:] = np.arange(960)
misc.imsave('16bit.png',a)
#read the png file using scipy
b = misc.imread('16bit.png')
print "scipy:" ,b.dtype
#read the png file using PIL
c = Image.open('16bit.png')
d = np.array(c)
print "PIL:", d.dtype
我建议使用 opencv:
pip install opencv-python
and
import cv2
image = cv2.imread('16bit.png', cv2.IMREAD_UNCHANGED)
- 相比之下开放图像IO https://stackoverflow.com/a/59498686/1032586, opencv 可以通过 pip 安装
- 读取单个 4000x4000 png 所需的时间与 PIL 大致相同,但 PIL 使用更多的 CPU 并且需要额外的时间将数据转换回
uint16
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)