首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >scikit- image :用imsave将ndarray写到image,用imread读回,数据不匹配

scikit- image :用imsave将ndarray写到image,用imread读回,数据不匹配
EN

Stack Overflow用户
提问于 2017-11-18 10:49:16
回答 2查看 12.5K关注 0票数 8

下面是最小的工作示例:

代码语言:javascript
运行
复制
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与

代码语言:javascript
运行
复制
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]]]

有人能给我一些建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-18 16:35:26

jpeg是一种有损图像压缩算法,旨在通过去除人眼不易察觉的信息来减小文件大小。这意味着以jpg格式保存将节省一些磁盘空间,但会更改数组的像素值。

你可以通过保存为无损的png格式来避免这个问题。下面的代码片段适用于我

代码语言:javascript
运行
复制
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)

这就是结果

代码语言:javascript
运行
复制
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]]]
票数 18
EN

Stack Overflow用户

发布于 2017-11-18 11:02:35

Scikit在下面使用PIL,你试过直接使用PIL吗?

示例中

代码语言:javascript
运行
复制
   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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47361966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档