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图像格式相互转换
Python - 尝试使用 PIL 的 Image.fromarray 保存 numpy 数组时出现 TypeError