2.6.1 打开和写入图像文件

将数组写入文件:

In [4]:

  1. from scipy import misc
  2. f = misc.face()
  3. misc.imsave('face.png', f) # 使用图像模块 (PIL)
  4. import matplotlib.pyplot as plt
  5. plt.imshow(f)
  6. plt.show()

2.6.1 打开和写入图像文件 - 图1

从图像文件创建一个numpy数组:

In [5]:

  1. from scipy import misc
  2. face = misc.face()
  3. misc.imsave('face.png', face) # 首先我们需要创建这个PNG文件
  4. face = misc.imread('face.png')
  5. type(face)

Out[5]:

  1. numpy.ndarray

In [6]:

  1. face.shape, face.dtype

Out[6]:

  1. ((768, 1024, 3), dtype('uint8'))

对于8位的图像 (0-255) dtype是uint8

打开raw文件 (照相机, 3-D 图像)

In [7]:

  1. face.tofile('face.raw') # 创建raw文件
  2. face_from_raw = np.fromfile('face.raw', dtype=np.uint8)
  3. face_from_raw.shape

Out[7]:

  1. (2359296,)

In [8]:

  1. face_from_raw.shape = (768, 1024, 3)

需要知道图像的shape和dtype (如何去分离数据类型)。

对于大数据, 使用np.memmap来做内存映射:

In [9]:

  1. face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3))

(数据从文件中读取,并没有加载到内存)

处理一组图像文件

In [10]:

  1. for i in range(10):
  2. im = np.random.random_integers(0, 255, 10000).reshape((100, 100))
  3. misc.imsave('random_%02d.png' % i, im)
  4. from glob import glob
  5. filelist = glob('random*.png')
  6. filelist.sort()