【问题标题】:OpenCV - Read 16 bit TIFF image in Python (sentinel-1 data)OpenCV - 在 Python 中读取 16 位 TIFF 图像(sentinel-1 数据)
【发布时间】:2017-07-02 03:47:12
【问题描述】:

我正在尝试在 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]) 显示黑色图像。

【问题讨论】:

  • 只是一个提示...尝试运行 InageMagickidentify 命令来检查 TIFF 中的最小/最大/平均/目录数。它安装在大多数 Linux 上。你想要identify -verbose YourImage.tif
  • 我有较小的 16 位 tiff 文件,它们工作正常(它们甚至在 imshow 中正确显示,尽管可能被截断为 8 位 - 34067, 34983, 35287]], dtype=uint16) - 这就是我的图像结束的方式( 137, 137, 137 在没有cv2.IMREAD_UNCHANGED 的情况下加载)。可能您正在加载黑色图片,或者实际范围不完全是 16 位(例如 12 位,移位 8 位产生大部分为零)。要么是大小图像,或者它工作正常 - 尝试将图像乘以 2 的幂,或在显示之前对其进行归一化(拉伸对比度)。或者前 600 行是黑色的......

标签: python image opencv numpy tiff


【解决方案1】:

根据 Andrew Paxson 的建议,可以使用不同的库。有一个专门用于播放tiff 图像的库。

同样使用下面的代码。确保您的系统中安装了tif

import tifffile as tiff
import matplotlib.pyplot as plt 

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

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2014-03-06
    相关资源
    最近更新 更多