各種讀取保存tif,tiff,png,jpg,mat等格式圖像方法大集合(python)

利用opencv讀取tif 文件

#導入cv模塊
import cv2 as cv
import numpy as np
#讀取圖像,支持 bmp、jpg、png、tiff 等常用格式
#第二個參數是通道數和位深的參數,有四種選擇,參https://www.cnblogs.com/goushibao/p/6671079.html
img = cv.imread("filename.tif",2)
print img
#在這裏一開始我寫成了img.shape(),報錯因爲img是一個數組不是一個函數,只有函數纔可以加()表示請求執行,
#參考http://blog.csdn.net/a19990412/article/details/78283742
print img.shape
print img.dtype 
print img.min()
print img.max()
#創建窗口並顯示圖像
cv.namedWindow("Image")
cv.imshow("Image",img)
cv.waitKey(0)#釋放窗口
cv.destroyAllWindows() 

對於cv2,imread的關於通道數和位深的flags有四種選擇:

IMREAD_UNCHANGED = -1#不進行轉化,比如保存爲了16位的圖片,讀取出來仍然爲16位。
IMREAD_GRAYSCALE = 0#進行轉化爲灰度圖,比如保存爲了16位的圖片,讀取出來爲8位,類型爲CV_8UC1。
IMREAD_COLOR = 1#進行轉化爲RGB三通道圖像,圖像深度轉爲8位
IMREAD_ANYDEPTH = 2#保持圖像深度不變,進行轉化爲灰度圖。
IMREAD_ANYCOLOR = 4#若圖像通道數小於等於3,則保持原通道數不變;若通道數大於3則只取取前三個通道。圖像深度轉爲8位

PIL讀取圖像

from PIL import Image
im = Image.open("filename")

支持單通道及多通道Uint8 TIFF圖像讀取,讀取單通道Uint16 TIFF圖像轉爲Uint8處理,直接讀取Uint16 TIFF圖像會報錯。

LIBTIFF包讀取保存圖像

from libtiff import TIFF
# to open a tiff file for reading:

tif = TIFF.open('filename.tif', mode='r')
# to read an image in the currect TIFF directory and return it as numpy array:

image = tif.read_image()
# to read all images in a TIFF file:

for image in tif.iter_images(): # do stuff with image
# to open a tiff file for writing:

tif = TIFF.open('filename.tif', mode='w')
# to write a image to tiff file

tif.write_image(image)

scikit包讀取保存圖像


from skimage import io
img = io.imread('testimg.tif')
import numpy as np
data=np.random.random([100,100])
io.imsave('rand_data.tif',np.float32(data))

 

imageio包讀取保存圖像

import imageio
im = imageio.imread('imageio:chelsea.png')  # read a standard image
im.shape  # im is a numpy array (300, 451, 3)
imageio.imwrite('~/chelsea-gray.jpg', im[:, :, 0])

misc包讀取保存圖像

from scipy import misc

# 讀入已有圖像,數據類型和原圖像一致
tif32 = misc.imread('.\test\lena32.tif') #<class 'numpy.float32'>
tif16 = misc.imread('.\test\lena16.tif') #<class 'numpy.uint16'>
tif8 = misc.imread('.\test\lena8.tif') #<class 'numpy.uint8'>

#保存圖像
misc.imsave('.\test\lena32_scipy.tif', tif32) #--> 8bit(tif16和tif8同)
misc.imsave('.\test\\randmat64_scipy.tif', flt) #--> 8bit
misc.imsave('.\test\\randmat8_scipy.tif', z8) #--> 8bit(z16和z32同)

 

 

由於mat文件也經常遇到,就把mat文件的讀寫保存也加進去吧!

scipy讀取保存mat文件


import scipy.io as sio
# load mean and std
matfile = sio.loadmat(meanstd_file)
test_mean = np.array(matfile['mean_test'])
test_std = np.array(matfile['std_test'])

# Save predictions to a matfile to open later in matlab
mdict = {"Recovery": Recovery}
sio.savemat(savename, mdict
io.imsave('Recovery.tif', np.float32(Recovery))

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章