python - 使用 GDAL 1.6.1 创建 CFloat64 ENVI 文件时出现问题

标签 python image-processing numpy gdal

我正在尝试使用 GDAL 编写 ENVI CFloat64 文件:

import numpy
from osgeo import gdal
from osgeo.gdalconst import GDT_CFloat64

a = numpy.zeros((1000, 1000), dtype='complex64')
driver = gdal.GetDriverByName("ENVI")
outfile = driver.Create("test.bin", 1000, 1000, 1, GDT_CFloat64)
outfile.GetRasterBand(1).WriteArray(a, 0, 0)
outfile = None

但我无法将数组写入 outfile.GetRasterBand(1).WriteArray(a, 0, 0) 中的 band,因为 outfile;但是,空文件确实被创建了。有什么想法我做错了吗?

编辑:我应该指定我可以读取和写入 ENVI Float32 文件,因此驱动程序就在那里。只有CFloat64我不会写...

最佳答案

简而言之,当 driver.Create(...)gdal.Open(...) 等返回 None ,这是 gdal 引发 IOError 或指示给定驱动程序名称无效的方式。 (或者可能表明发生了另一种错误,但这两种错误似乎最有可能)

(我会跳过关于我有多不喜欢 gdal 的 python 绑定(bind)的咆哮......)

您显然没有做错任何事情(该示例在我的计算机上创建了一个全零的 .bin 文件和一个格式正确的 .hdr 文件,正如它应该的那样。)。

鉴于它创建了一个空文件,您似乎有权写入该文件,因此这不是 IO 问题。

这意味着:

  1. 您的 gdal 版本不支持 ENVI 文件(例如 gdal.GetDriverByName("something random") 也会返回 None。)
  2. Gdal 在为 ENVI 数据集创建驱动程序时遇到某种内部错误。

检查gdalinfo --formats的输出,并确保gdal编译时支持ENVI文件(不过我认为应该是默认的)。

如果没有,请检查是否可以编写全零值的 geotiff(或任何其他格式)。如果没有任何效果,您需要重新安装 gdal。

希望能为您指明正确的方向!

关于python - 使用 GDAL 1.6.1 创建 CFloat64 ENVI 文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5006911/

相关文章:

python - 如何使用opencv获得图像蒙版后模糊图像?

python - 制作包含字符串和整数的 ndarray

python - 即使 DAG 未运行, Airflow 变量也会更新

python - Python Dict 中错误消息的优先级

image-processing - 在 PHP 中将上传的图像转换为灰度

c# - 从图像中找到直线上的角

python - str(列表[索引]) : IndexError: list index out of range

python - 类型错误 : 'numpy.ndarray' object is not callable within for loop Python

python - SHA256 不会产生相同的结果

python - OpenMP 和 Cython 缺乏加速和错误结果