This is an old revision of the document!
Table of Contents
Python Image Processing Cookbook
Loading Image File
matplotlib has matplotlib.image.imread, and PIL also has similar file input methods. The former is limited to png files and the latter is limited to 8-bit images. For this reason, we focus on openCV and TiffFile modules.
openCV
Tiff file to numpy.ndarray
<sxh python>
import cv
img = cv.imread('/Users/miura/img/blobs.tif')
type(img)
<type 'numpy.ndarray'>
</sxh>
- cv.imread reads only the first frame in tiff stack.
- 8bit image becomes RGB-like format, triplet of 8 bits per pixel.
Tiff file to Iplimage
<sxh python> In [40]: img = cv.LoadImage('/Users/miura/img/blobs.tif') In [41]: img Out[41]: <iplimage(nChannels=3 width=256 height=254 widthStep=768 )> </sxh>
Tiff file to cvMat
Tifffile.py
Tiff to numpy.ndarray, Single Image
<sxh python> In [44]: import tifffile as tff In [50]: tiffimg = tff.TIFFfile('/Users/miura/img/blobs.tif') In [51]: type(tiffimg) Out[51]: <class 'tifffile.TIFFfile'> In [52]: img = tiffimg.asarray() In [53]: type(img) Out[53]: <type 'numpy.ndarray'> </sxh>
Tiff to numpy.ndarray, Stack Image
<sxh python> In [54]: tiffimg = tff.TIFFfile('/Users/miura/img/flybrainG.tif') In [55]: img = tiffimg.asarray() In [57]: tiffimg Out[57]: <tifffile.TIFFfile object at 0x1299ac910> In [65]: type(img) Out[65]: <type 'numpy.ndarray'> In [61]: img10 = tiffimg[10].asarray() In [62]: type(img10) Out[62]: <type 'numpy.ndarray'> </sxh>
- if the image file is a single frame image, not so different from the others
- Stack tiff file is loaded peroperly. Single frame is extractable by indexing. In above case, 11th frame is extracted.
Conversion between types
OpenCV Mat object to numpy.ndarray object
- tested with python2.6, openCV 2.2, numpy 1.6.1, OSX10.6.8
<sxh python>
import cv
import numpy as np
mat = cv.CreateMat( 3 , 5 , cv.CV_32FC1 )
cv.Set( mat , 7 )
a = np.asarray( mat[:,:] )
a
array(7., 7., 7., 7., 7.], [ 7., 7., 7., 7., 7.], [ 7., 7., 7., 7., 7., dtype=float32)
</sxh> <link>
OpenCV Image object to numpy.ndarray object
- tested with python2.6, openCV 2.2, numpy 1.6.1, OSX10.6.8
<sxh python>
im = cv.CreateImage( ( 5 , 5 ) , 8 , 1 )
cv.Set( im , 100 )
im_array = np.asarray( im )
im_array
array(<iplimage(nChannels=1 width=5 height=5 widthStep=8 )>, dtype=object)
im_array = np.asarray( im[:,:] )
im_array
array(100, 100, 100, 100, 100], [100, 100, 100, 100, 100], [100, 100, 100, 100, 100], [100, 100, 100, 100, 100], [100, 100, 100, 100, 100, dtype=uint8)
</sxh> <link>
