- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当使用 Scipy toimage
或 imsave
保存二维 Numpy 数组(单值)时,像素值与 Numpy 数组中的像素值不完全匹配。相反,有些区域(主要是边缘)图像算法似乎使用了某种插值。
是否有停止插值并保留准确数据的选项(例如 7 总是在 PNG 中得到 rgb(7,7,7)?
最佳答案
如果您有一个 2D numpy 数组,那么您将保存为灰度 PNG,因此您永远不会获得 rgb 图像(只有一个 channel )。我不确定你所说的单值是什么意思,也许是单精度 float ?尽管 PIL 支持单精度 float ,但 PNG 不支持。保存为 PNG 时,您可以使用每 channel 8 位(默认)或每 channel 16 位。这意味着您的数组将被缩放到最大 2^8/2^16(8/16 位),并转换为整数。正是在这种转换中,结果可能略有不同。
scipy.misc.image
似乎没有保存为 16 位的选项,因此它总是会写入 8 位 PNG。但是您可以使用 scipy.misc.toimage
创建 16 位图像,只需确保传递 mode='I'
。还要确保指定数组的最小值和最大值以避免缩放。以下是使用它保存 16 位 png 的方法:
import numpy as np
import scipy.misc
a = np.random.uniform(0, 2**16 - 1, (500, 500)).astype('int32')
img = scipy.misc.toimage(a, high=np.max(a), low=np.min(a), mode='I')
img.save('my16bit.png')
# check that you got the same values
b = scipy.misc.imread('my16bit.png')
b.dtype
# dtype('int32')
np.array_equal(a, b)
# True
请注意,在本示例中,我使用了 int32
作为数据类型。但是,数据仍必须适合 uint16
。如果您输入负值或大于 2^16 的值,这些值将在保存为 PNG 时被裁剪。相反,即使 sp.misc.imread
读取为 int32
,数据也永远不会超过 uint16
。
总结:如果您想将完全相同的 numpy 数组写入 PNG,您需要确保它是 uint8/uint16
类型,并且您通过正确的 high/low/mode
到 scipy.misc.toimage
。
关于python - 使用 Scipy imsave 将 Numpy 数组保存到图像时保留未更改的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13901197/
我正在尝试编写将使用 numpy 和 scipy 生成视差图的代码,但是我存储在我的图像的 numpy 数组中的值与我的输出图像中实际显示的值完全不同,用 misc 保存。保存。例如,在数组中,没有一
我正在尝试运行一个 while 循环,在循环结束时创建并保存图像。不幸的是,每个循环都会更新以前保存的图像文件,而不是创建新的图像文件。因此,在运行 5 次的 while 循环结束时(应该创建 5 个
我正在尝试使用一些矩形和圆形的随机图像生成 CLEVR 数据集。当我调试每个 plt.imshow() 语句的代码时,我可以看到一个新图像,其中生成了形状以及在上次执行的循环中生成的形状。虽然,令我惊
我正在进行图像处理,并在 Jupyter Notebook 中使用 Python 2.7。但是,当我使用 scipy.misc.imsave() 将 numpy 数组保存为图像时,结果看起来比使用 m
考虑以下 MWE 来生成随机图像: import matplotlib.pyplot as plt import numpy as np pts = np.random.random_sample((
当我使用 scipy.misc.imsave 在 scipy 中保存图像时,它总是“规范化”图像强度,将最低值缩放为 0,将最高值缩放为 1(对于灰度),可比MATLAB 对 imshow(image
//1 我有颜色矩阵(M*N) 我使用 imsave 来获取图像。 图,imagesc(颜色矩阵),colormap(灰色);保存; 它很简单并且有效。但是我每次都必须给图像名称来保存图像。如何将文件
我有一个简单的任务要完成,但我发现当前的保存功能根本没有帮助我。我要做的只是将灰度图像转换为另一幅强度属于较小区间(特别是 120 到 180 之间)的图像。 我实现了转换(就像改变不同的温标),但是
我用 matplotlib 绘制了大量图片,以便用它制作视频,但是当我尝试制作视频时,我看到图片的形状在时间上并不相同......这会导致一些错误。当我使用 Imsave 时,是否有命令强加输出的形状
这个函数用于储存图片,将数组保存为图像 此功能仅在安装了Python Imaging Library(PIL)时可用。版本也比较老了,新的替代它的是imageio.imwrite() 用法:
我有一组从彩色图像读取的灰度图像。如果我使用 matplotlib 来显示灰度图像,它看起来就很好。但是当我 io.imsave 它时,它被毁了(被大量的噪音所破坏)。但是,如果我在 io.imsav
当我保存图像时,它的格式是numpy.uint16,当我加载它时,它是numpy.uint8,它搞乱了整个管道为我。如何防止这种情况发生? 我正在打电话 from scipy.misc import
from scipy.misc import imread from matplotlib import pyplot import cv2 from cv2 import cv from SRM i
当使用 Scipy toimage 或 imsave 保存二维 Numpy 数组(单值)时,像素值与 Numpy 数组中的像素值不完全匹配。相反,有些区域(主要是边缘)图像算法似乎使用了某种插值。 是
无法在 Colaboratory 上使用 scipy.misc.imsave from scipy.misc import imsave ImportError: cannot import name
我打开 python3 解释器并输入 import scipy.misc scipy.misc.imsave 结果 Traceback (most recent call last): File
我想禁用(或尽可能降低)plt.imsave() 的压缩。我只想快速转储几乎可以立即重复使用的 PNG 图像。 有什么想法可以做到这一点吗? (我正在使用聚合后端) 最佳答案 从外观上看,matplo
函数 imsave() 在 scipy 1.0.0 (Python 3.5) 的 scipy.misc 包中不存在。它在哪里? 我正在尝试 sample program使用 keras 术语使用 sc
我正在截屏(PNG 格式)调整大小,然后通过 scipy.misc 模块(imread、imresize、imsave 函数)以 TIF 格式写回。 TIF 格式的图像将被送入 Tesseract-O
我正在尝试让 opencv VideoWriter 从 skimage-kit 修改的图像生成 avi。我遇到了 skimage.io.imsave 和 VideoWriter.write 之间的颜色
我是一名优秀的程序员,十分优秀!