2.6.1 打开和写入图像文件
将数组写入文件:
In [4]:
from scipy import misc
f = misc.face()
misc.imsave('face.png', f) # 使用图像模块 (PIL)
import matplotlib.pyplot as plt
plt.imshow(f)
plt.show()
从图像文件创建一个numpy数组:
In [5]:
from scipy import misc
face = misc.face()
misc.imsave('face.png', face) # 首先我们需要创建这个PNG文件
face = misc.imread('face.png')
type(face)
Out[5]:
numpy.ndarray
In [6]:
face.shape, face.dtype
Out[6]:
((768, 1024, 3), dtype('uint8'))
对于8位的图像 (0-255) dtype是uint8
打开raw文件 (照相机, 3-D 图像)
In [7]:
face.tofile('face.raw') # 创建raw文件
face_from_raw = np.fromfile('face.raw', dtype=np.uint8)
face_from_raw.shape
Out[7]:
(2359296,)
In [8]:
face_from_raw.shape = (768, 1024, 3)
需要知道图像的shape和dtype (如何去分离数据类型)。
对于大数据, 使用np.memmap
来做内存映射:
In [9]:
face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3))
(数据从文件中读取,并没有加载到内存)
处理一组图像文件
In [10]:
for i in range(10):
im = np.random.random_integers(0, 255, 10000).reshape((100, 100))
misc.imsave('random_%02d.png' % i, im)
from glob import glob
filelist = glob('random*.png')
filelist.sort()