scikit-image:使用 imsave 将 ndarray 写入图像,使用 imread 读回,数据不匹配
scikit-image: write a ndarray to image with imsave, read back with imread, data don't match
这是最小的工作示例:
import numpy as np
from skimage.io import imsave, imread
image = np.array([[[109, 232, 173],
[ 55, 35, 144]],
[[ 43, 124, 185],
[234, 127, 246]]], dtype=np.uint8)
imsave("test.jpg", image)
rb_image = imread("test.jpg")
print("original image")
print(image)
print("read back image")
print(rb_image)
在 运行 之后,结果是,从文件中读回的 ndarray 与
不匹配
original image
[[[109 232 173]
[ 55 35 144]]
[[ 43 124 185]
[234 127 246]]]
read back image
[[[111 208 255]
[ 42 61 138]]
[[ 72 140 201]
[141 131 218]]]
有人可以给我一些建议吗?
Scikit 在底层使用 PIL,你试过直接使用 PIL
示例
import numpy as np
from skimage.io import imsave, imread
from PIL import Image
image = np.array([[[109, 232, 173],
[ 55, 35, 144]],
[[ 43, 124, 185],
[234, 127, 246]]], dtype=np.uint8)
Image.fromarray(image).save()
rb_image = imread("test.jpg")
print("original image")
print(image)
print("read back image")
print(rb_image)
jpeg 是一种有损图像压缩算法,旨在通过去除人眼不易察觉的信息来减小文件大小。这意味着保存为 jpg 将节省一些磁盘 space 但会更改数组的像素值。
您可以通过保存为无损 png 格式来避免该问题。以下片段对我有用
import numpy as np
from skimage.io import imsave, imread
image = np.array([[[109, 232, 173],
[ 55, 35, 144]],
[[ 43, 124, 185],
[234, 127, 246]]], dtype=np.uint8)
imsave("test.png", image)
rb_image = imread("test.png")
print("original image")
print(image)
print("read back image")
print(rb_image)
这是结果
original image
[[[109 232 173]
[ 55 35 144]]
[[ 43 124 185]
[234 127 246]]]
read back image
[[[109 232 173]
[ 55 35 144]]
[[ 43 124 185]
[234 127 246]]]
这是最小的工作示例:
import numpy as np
from skimage.io import imsave, imread
image = np.array([[[109, 232, 173],
[ 55, 35, 144]],
[[ 43, 124, 185],
[234, 127, 246]]], dtype=np.uint8)
imsave("test.jpg", image)
rb_image = imread("test.jpg")
print("original image")
print(image)
print("read back image")
print(rb_image)
在 运行 之后,结果是,从文件中读回的 ndarray 与
不匹配original image
[[[109 232 173]
[ 55 35 144]]
[[ 43 124 185]
[234 127 246]]]
read back image
[[[111 208 255]
[ 42 61 138]]
[[ 72 140 201]
[141 131 218]]]
有人可以给我一些建议吗?
Scikit 在底层使用 PIL,你试过直接使用 PIL
示例
import numpy as np
from skimage.io import imsave, imread
from PIL import Image
image = np.array([[[109, 232, 173],
[ 55, 35, 144]],
[[ 43, 124, 185],
[234, 127, 246]]], dtype=np.uint8)
Image.fromarray(image).save()
rb_image = imread("test.jpg")
print("original image")
print(image)
print("read back image")
print(rb_image)
jpeg 是一种有损图像压缩算法,旨在通过去除人眼不易察觉的信息来减小文件大小。这意味着保存为 jpg 将节省一些磁盘 space 但会更改数组的像素值。
您可以通过保存为无损 png 格式来避免该问题。以下片段对我有用
import numpy as np
from skimage.io import imsave, imread
image = np.array([[[109, 232, 173],
[ 55, 35, 144]],
[[ 43, 124, 185],
[234, 127, 246]]], dtype=np.uint8)
imsave("test.png", image)
rb_image = imread("test.png")
print("original image")
print(image)
print("read back image")
print(rb_image)
这是结果
original image
[[[109 232 173]
[ 55 35 144]]
[[ 43 124 185]
[234 127 246]]]
read back image
[[[109 232 173]
[ 55 35 144]]
[[ 43 124 185]
[234 127 246]]]