【发布时间】:2020-01-29 22:13:23
【问题描述】:
我有一些温度场值,我想将其转换为灰度图像,同时保留分辨率。 (例如,如果它是(100x100)大小的浮点数组,那么转换应该是灰度(100x100)图像)。然后我将处理图像并将其转换回温度numpy数组。图像处理部分可以被认为是一个黑盒过程。
转换无损很重要。
此外,图像处理代码将识别 .png 和 .jpg。 (我不确定对包括 tiff 在内的其他文件格式的识别。此外,即使是 jpg 格式也不是首选,因为它们会导致有损转换)。
到目前为止我的尝试:
Matplotlib 的
imsave()可以保持分辨率并且是无损的。但它将图像转换为 RGB 而不是灰度。这种方法对我来说也很好,但我无法准确地将 3 通道 RGB 图像转换回浮点 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)识别。
【问题讨论】:
-
我的回答解决了你的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 meta.stackexchange.com/questions/5234/…
-
嗨,对不起,我忙于其他工作。是的,你的回答对我想要的很有帮助。但同样,当我将 TIFF 图像输入图像处理代码时,它给出的结果输出图像是 uint8 格式。但这些值仅相差很小。感谢您的帮助