您的位置:首页 > 编程语言 > Python开发

Python使用scipy和numpy操作处理图像

2014-12-21 00:03 706 查看
之前使用Python处理数据的时候都是一些简单的plot。今天遇见了需要处理大量像素点,并且显示成图片的问题,无奈水浅,一筹莫展。遂Google之。

找到如下站点,真心不错。准备翻译之~~~
http://scipy-lectures.github.io/advanced/image_processing/index.html

2.6.1. Opening and writing to image files

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





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


2.6.2. Displaying images

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>





[Python source code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: