1
我需要使用Python 2從磁盤讀取單通道32位整數TIFF圖像以執行一些圖像分析。我試圖image.imread
從matplotlib,但我無法獲取代碼的工作,因爲數據被讀取爲4通道8位整數圖像:如何使用matplotlib讀取32位整數圖像?
>>> import numpy as np
>>> import matplotlib.image as mpimg
>>> img = mpimg.imread('my_image.tif')
>>> img.shape
(52, 80, 4)
>>> img[0:2, 0:2]
array([[[255, 255, 255, 255],
[255, 255, 255, 255]],
[[255, 255, 255, 255],
[255, 255, 255, 255]]], dtype=uint8)
問題:是否可以讀取單通道32位整數圖像使用matplotlib?
我知道有從PIL的替代方式來讀取在Python這樣的圖像,例如使用Image.open
:
>>> from PIL import Image
>>> img = np.asarray(Image.open('my_image.tif'))
>>> img.dtype
dtype('int32')
>>> img.shape
(52, 80)
>>> img[0:2, 0:2]
array([[8745, 8917],
[8918, 9479]])
另一種可能性是使用io.imread
從scikit學習:
>>> from skimage import io
>>> img = io.imread('my_image.tif')
另一種方法是利用來自OpenCV的imread
函數。但是,在這種情況下數據都將被強制轉換爲32位整數:
>>> import cv2
>>> img = cv2.imread('my_image.tif', -1)
>>> img[0:2, 0:2]
array([[ 1.22543551e-41, 1.24953784e-41],
[ 1.24967797e-41, 1.32829081e-41]], dtype=float32)
>>> img.dtype = np.int32
>>> img[0:2, 0:2]
array([[8745, 8917],
[8918, 9479]])
另一種選擇是[tifffile](https://pypi.python.org/pypi/tifffile)包。 –
Matplotlib主要用於數據可視化,而不是數據生成。 'imread'是一個有其侷限性的便利功能。由於有很多專門的圖像處理工具可用,因此matplotlib中不需要這種特殊情況處理。 – ImportanceOfBeingErnest