Ваш подход мне кажется правильным.Ниже приведен пример, который отлично работает.
In [1]: import numpy as np
In [2]: import PIL
In [3]: from PIL import Image
In [4]: img = Image.open('image.tif')
In [5]: img.show()
In [6]: img_arr = np.array(img)
# 2D array
In [7]: img_arr.shape
Out[7]: (44, 330)
In [8]: img_arr.dtype
Out[8]: dtype('uint8')
In [9]: img_arr
Out[9]:
array([[ 0, 1, 2, ..., 244, 245, 246],
[ 0, 1, 2, ..., 244, 245, 246],
[ 0, 1, 2, ..., 244, 245, 246],
...,
[ 0, 1, 2, ..., 244, 245, 246],
[ 0, 1, 2, ..., 244, 245, 246],
[ 0, 1, 2, ..., 244, 245, 246]], dtype=uint8)
В качестве альтернативы вы также можете использовать matplotlib для чтения изображения, как в:
In [10]: import matplotlib.pyplot as plt
In [12]: img_ = plt.imread('image.tif')
# 3D array
In [13]: img_.shape
Out[13]: (44, 330, 4)
# PIL image read yields a 2D array instead
In [14]: img_arr.shape
Out[14]: (44, 330)
In [15]: img_.dtype
Out[15]: dtype('uint8')