相关疑难解决方法(0)

使用scikit-image将numpy数组保存为具有高精度(16位)的图像

我正在使用2D浮点numpy数组,我想保存到高精度的灰度.png文件(例如16位).skimage.io如果可能的话,我想使用scikit-image 包.

这是我尝试过的主要内容:

import numpy as np
from skimage import io, exposure, img_as_uint, img_as_float

im = np.array([[1., 2.], [3., 4.]], dtype='float64')
im = exposure.rescale_intensity(im, out_range='float')
im = img_as_uint(im)
im
Run Code Online (Sandbox Code Playgroud)

生产:

array([[    0, 21845],
       [43690, 65535]], dtype=uint16)
Run Code Online (Sandbox Code Playgroud)

首先,我尝试将其保存为图像,然后使用Python Imaging Library重新加载:

# try with pil:
io.use_plugin('pil')
io.imsave('test_16bit.png', im)
im2 = io.imread('test_16bit.png')
im2
Run Code Online (Sandbox Code Playgroud)

生产:

array([[  0,  85],
       [170, 255]], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)

所以在某处(无论是写入还是读取)我都失去了精确度.然后我尝试使用matplotlib插件:

# try with matplotlib:
io.use_plugin('matplotlib')
io.imsave('test_16bit.png', im)
im3 = io.imread('test_16bit.png')
im3
Run Code Online (Sandbox Code Playgroud)

给我一个32位浮点数:

array([[ 0.        ,  0.33333334],
       [ 0.66666669,  1.        ]], …
Run Code Online (Sandbox Code Playgroud)

python numpy image-processing scipy scikit-image

11
推荐指数
1
解决办法
2万
查看次数

使用 matplotlib 保存灰度图像,加载时有多个通道

我正在使用

import matplotlib.pyplot as plt
plt.imsave(img_path,img_arr,cmap = 'gray') #shape (512,512)
...
img = plt.imread(img_path)
Run Code Online (Sandbox Code Playgroud)

并且 img.shape 返回一个 (512,512,4) 而我预计它只会是 (512,512)。我想也许所有的频道都是一样的,所以我可以只选择一个,但np.allclose(img[:,:,0],img_arr) 无论我选择哪个索引都返回 false。打印图像,它们确实是我比较的正确图像,因为它们看起来几乎相同(肉眼),但显然不完全相同。

我也尝试用 cv2 保存图像,但由于某种原因,这似乎保存了一个黑匣子。加载它们cv2.imread(img_path,0)确实会返回一个 (512,512) 数组,但似乎丢失了一些东西,因为再次np.allclose()告诉我它们是不同的。

我想知道是否有保存灰度图像的好方法?我尝试的每种方法似乎都将其转换为 RBG 或 RGBA,这真的很烦人。另外,我想保留图像的 dtype (int16),因为下采样会丢失重要信息。

提前致谢。

python image matplotlib

6
推荐指数
1
解决办法
2311
查看次数

如何将NumPy数组保存为16位单通道PNG图像?

我有一个NumPy数组格式的图像,我想将它保存到我的磁盘.我用过这段代码:

from PIL import Image
....
Image.fromarray(img).save('res.png')
Run Code Online (Sandbox Code Playgroud)

但它保存为8位.如何将其保存为16位?

python python-imaging-library

2
推荐指数
1
解决办法
7912
查看次数