你如何在python中读取32位TIFF图像?

ste*_*osn 4 python 32-bit tiff image-processing matplotlib

我想用python读取32位浮点图像文件来做一些图像分析。

我试过了

import matplotlib.pyplot as plt

im = plt.imread('path_to_file.tif')
Run Code Online (Sandbox Code Playgroud)

但是,这只会将数据读取为 8 位整数值。有没有办法为 imread() 提供正确的数据类型?

-- 好吧,它以前可以使用 16 位 TIFF 文件开箱即用,但不适用于 32 位浮点数。

Ton*_*has 7

我在尝试读取单通道 32 位整数图像时遇到了类似的问题。我想出的解决方案是:

from skimage import io
im = io.imread('path_to_file.tif')
Run Code Online (Sandbox Code Playgroud)

如果您的计算机上安装了 OpenCV,您还可以尝试:

import cv2
im = cv2.imread('path_to_file.tif', -1)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 使用 skimage 效果很好,但是在使用 opencv(使用 python3.6)时我得到了 NoneType (3认同)

Joh*_*our 5

这对我有用(关键标志是IMREAD_ANYDEPTH):

cv2.imread(fullImagePath, flags=(cv2.IMREAD_GRAYSCALE | cv2.IMREAD_ANYDEPTH))
Run Code Online (Sandbox Code Playgroud)

我在这里找到它: https: //github.com/opencv/opencv/issues/7025


ste*_*osn 3

我通过PIL找到了一个方法,那就是:

from matplotlib import pyplot as plt
from matplotlib import cm

from PIL import Image
from numpy import array

im = Image.open('path_to_file.tif')

ncols, nrows = im.size
ima = array(im.getdata()).reshape((nrows, ncols))
plt.imshow(ima, cmap=cm.Greys_r)
Run Code Online (Sandbox Code Playgroud)

可能对某人有帮助。

S