如何在保持分辨率的同时将2D float numpy数组无损保存到灰度图像中?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在保持分辨率的同时将2D float numpy数组无损保存到灰度图像中?相关的知识,希望对你有一定的参考价值。
我有一些温度场值,我想在保持分辨率时将其转换为灰度图像。 (例如,如果它是(100x100)大小的float数组,则转换应为灰度(100x100)图像)。然后,我将处理该图像并将其转换回Temperature numpy数组。图像处理部分可以被视为黑盒处理。
重要的是转换要无损。
此外,图像处理代码将识别.png和.jpg。 (我不确定是否可以识别其他文件格式,包括tiff。而且,即使jpg格式也不是首选,因为它们会导致有损转换)。
我到目前为止的尝试:
Matplotlib的
imsave()
保持分辨率且无损。但是它将图像转换为RGB而不是灰度。这种方法对我也很好,但是我无法将3通道RGB图像准确地转换回float numpy数组。例如,我使用了一个10x10 numpy浮点数组temperature
,并使用了plt.imsave('Temperature_profile.png',temperature)
。然后,我重新打开了同一张图片,但无法找到将其转换回(10x10)浮点数组的准确方法。因此,如果有一种方法可以无损地将3通道图像转换回2D矩阵,则可以解决该问题。PIL的
Image.fromarray()
保留分辨率,并且可以将图像另存为灰度图像。但是我无法无损地保存矩阵并无损地取回它。因此,我会得到错误的结果。 (Converting 2D Numpy array of grayscale values to a PIL image)scipy.misc.imsave()
已弃用。imageio.imwrite()
给出有关有损转换的警告。 (“从float64到uint8的有损转换”)。[
opencv
和cv2
由于某种原因未被我的spyder环境识别(python 3.7,Anaconda 4.7.12)。
您需要一种可以保存浮点数的无损图像格式:
- PNG最多只能保存16位整数,
- JPEG不是无损的,只有8位整数,
- GIF是整数和8位,
- NetPBM仅是最大16位整数。
因此使用TIFF进行无损压缩或不进行压缩。或者,您可以使用PFM-便携式浮动图。
如果您的查看器无法显示包含浮点的TIFF文件,则始终可以使用ImageMagick将它们转换为可见的对象:
magic float.tif viewable.png
[我知道tifffile和pyvips都是处理TIFF浮点数的良好Python库。
以上是关于如何在保持分辨率的同时将2D float numpy数组无损保存到灰度图像中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 2D float numpy 数组转换为 2D int numpy 数组?
Swift 3、iOS 10+、xCode 8.3+、Quickblox - 在保持纵横比/视频分辨率的同时切换全屏远程流
如何使用 DPI 缩放因子 (float) 设置边距 (int)