PIL中的Image和numpy中的数组array相互转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PIL中的Image和numpy中的数组array相互转换相关的知识,希望对你有一定的参考价值。

参考技术A

来源于 https://blog.csdn.net/u014568921/article/details/51324448?locationNum=10&fps=1

img = np.asarray(image)

img=np.array(image)
需要注意的是,如果出现read-only错误,并不是转换的错误,一般是你读取的图片的时候,默认选择的是"r","rb"模式有关。

修正的办法: 手动修改图片的读取状态
img.flags.writeable = True # 将数组改为读写模式

或者

或者

im = np.array(pil_im)

方法1

from PIL import Image
Image.fromarray(np.uint8(img))

注意img如果是uint16的矩阵而不转为uint8的话,Image.fromarray这句会报错

File "/usr/local/lib/python2.7/site-packages/PIL/Image.py", line 1884, in fromarray
raise TypeError("Cannot handle this data type")
TypeError: Cannot handle this data type

类似这个问题

PIL weird error after resizing image in skimage

方法2

import cv2

cv2.imwrite("output.png", out)

out可以是uint16类型数据

16位深度图像转8位灰度

matlab

img=imread(\'output.png\')

img1=im2uint8(img)

imwrite(img1,\'result.jpg\')

或者python

from PIL import Image

import numpy as np

import math

img=Image.fromarray(np.uint8(img_array/float(math.pow(2,16)-1)*255))

img.save(\'22.png\')

PIL.Image.fromarray() 和 numpy.asarray()

1 将numpy.array 转换为 PIL.Image 类型

from PIL import Image
image = Image.fromarray(image)

2 将 PIL.Image 转换为 numpy.array 类型

import numpy as np
img = np.asarray(img)

以上是关于PIL中的Image和numpy中的数组array相互转换的主要内容,如果未能解决你的问题,请参考以下文章

python中PIL.Image,OpenCV,Numpy图像格式相互转换

numpy_array与PIL.Image之间的互转

如何将 PIL 图像转换为 numpy 数组?

Python中numpy.array函数有什么作用呢?

Python - 尝试使用 PIL 的 Image.fromarray 保存 numpy 数组时出现 TypeError

PIL 无法将模式 F 写入 jpeg