1. 程式人生 > >Python使用scipy和numpy操作處理影象

Python使用scipy和numpy操作處理影象

之前使用Python處理資料的時候都是一些簡單的plot。今天遇見了需要處理大量畫素點,並且顯示成圖片的問題,無奈水淺,一籌莫展。遂Google之。

找到如下站點,真心不錯。準備翻譯之~~~

http://scipy-lectures.github.io/advanced/image_processing/index.html

Writing an array to a file:

from scipy import misc
l = misc.lena()
misc.imsave('lena.png', l) # uses the Image module (PIL)

import matplotlib.pyplot
as plt plt.imshow(l) plt.show()
../../_images/lena.png

Creating a numpy array from an image file:

>>>
>>> from scipy import misc
>>> lena = misc.imread('lena.png')
>>> type(lena)
<type 'numpy.ndarray'>
>>> lena.shape, lena.dtype
((512, 512), dtype('uint8'))

dtype is uint8 for 8-bit images (0-255)

Opening raw files (camera, 3-D images)

>>>
>>> l.tofile('lena.raw') # Create raw file
>>> lena_from_raw = np.fromfile('lena.raw', dtype=np.int64)
>>> lena_from_raw.shape
(262144,)
>>> lena_from_raw.shape = (512, 512)
>>> import os
>>> 
os.remove('lena.raw')

Need to know the shape and dtype of the image (how to separate databytes).

For large data, use np.memmap for memory mapping:

>>>
>>> lena_memmap = np.memmap('lena.raw', dtype=np.int64, shape=(512, 512))

(data are read from the file, and not loaded into memory)

Working on a list of image files

>>>
>>> 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()

Use matplotlib and imshow to display an image inside amatplotlib figure:

>>>
>>> l = misc.lena()
>>> import matplotlib.pyplot as plt
>>> plt.imshow(l, cmap=plt.cm.gray)
<matplotlib.image.AxesImage object at 0x3c7f710>

Increase contrast by setting min and max values:

>>>
>>> plt.imshow(l, cmap=plt.cm.gray, vmin=30, vmax=200)
<matplotlib.image.AxesImage object at 0x33ef750>
>>> # Remove axes and ticks
>>> plt.axis('off')
(-0.5, 511.5, 511.5, -0.5)

Draw contour lines:

>>>
>>> plt.contour(l, [60, 211])
<matplotlib.contour.ContourSet instance at 0x33f8c20>
../../_images/plot_display_lena_1.png