Python中的OpenCV - 读取16位TIFF图像(哨兵-1数据)

3

我正在尝试在Python中读取一张16位TIFF图像(26446 x 16688)。使用OpenCV时,仅通过以下方式读取黑色图像(所有强度读取为0):

    self.img = cv2.imread(self.filename, cv2.IMREAD_UNCHANGED)

openCV能够处理16位或更大的图像(~840MB)吗?有什么解决方法吗?

编辑:此外,cv2.imshow("output", self.img[0:600])会显示黑色图像。


1
只是一个提示...尝试运行 InageMagickidentify 命令来检查你的 TIFF 文件中目录的最小值/最大值/平均值/数量。它在大多数 Linux 系统上安装了。你需要运行 identify -verbose YourImage.tif - undefined
我有一些较小的16位TIFF文件,它们工作正常(即使在imshow中显示也是正确的,尽管可能被截断为8位 - 34067, 34983, 35287]],dtype=uint16) - 这是我的图像结尾(当没有使用cv2.IMREAD_UNCHANGED加载时为137, 137, 137)。也许你正在加载一张黑色图片,或者实际范围不完全是16位(例如12位,并通过8位移位产生大部分零值)。要么是图像的大小问题,要么就是正常工作 - 尝试将图像乘以某个2的幂次方,或者在显示之前进行归一化处理(拉伸对比度)。或者前600行是黑色的... - undefined
3个回答

1

使用针对栅格数据(在您的情况下,Sentinel-1)特定的图像库。例如,您可以使用rasterio来读取和显示卫星图像。

示例:

import rasterio
from rasterio.plot import show

img = rasterio.open("image.tif")

show(img)

1

0
如Andrew Paxson所建议,可以使用不同的库。有一个专门用于处理图像的库。
请使用以下代码进行操作。确保您的系统中已安装。
import tifffile as tiff
import matplotlib.pyplot as plt 

filename = 'Image.tif'
img = tiff.imread(filename)
plt.imshow(img)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接