我的问题是关于名为gdaladdo的GDAL(地理空间数据抽象库)工具。该工具应该从.tif文件构建概述图像。从我在其上找到的文档中,我可以看到它通常被输入到命令提示符中。我一直试图找到一种方法让它通过我的Python程序运行,因为我有几千个需要外部概述的.tif图像。我对这个程序的最终目标是能够将.tif图像传递给它,并为它创建一个.rrd金字塔。到目前为止,这是我的代码:
import gdal
import os
from subprocess import call
#Define gdaladdo
gdaladdoFile = 'C:\Program Files (x86)\GDAL\gdaladdo.exe'
#--------------------------------------------------------
os.chdir("Images")
openfile = open('imagenames.txt', 'r')
if {openfile.closed == False}:
count = 0
while count < 5:
#Grab the image to work with
filename = openfile.readline()
#Strip off the newline
filename.rstrip('\n')
#Create pyramid
call([gdaladdoFile, '-ro', '--config USE_RRD YES', 'filename', '2 4 8 16'])
count += 1
openfile.close()
else:
print "No file to open!"
我收到与call([gdaladdoFile, '-ro', '--config USE_RRD YES', 'filename', '2 4 8 16'])
行有关的错误。通常在命令提示符下键入此命令时,它应如下所示:&#39; gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE erdas.img 2 4 8 16 &#39;但Python说选项(如--config USE_RRD YES)是不正确的语法。所以我跟着一个将参数传递给子进程(我在这里找到)并将选项放在单引号中并在每个引号后面添加逗号的示例。当我运行程序来测试它时,语法错误消失但新的语法错误出现。它说&#34; FAILURE:未知选项名称&#39; - config USE_RRD YES&#39; &#34;在命令提示符窗口中。 我应该如何更改此特定行以使其按照我希望的方式执行操作?
我是stackoverflow的新手,还在大学学习编程,所以请原谅我的无知并对我温柔。提前感谢您对此问题的帮助。
gdaladdo reference link,万一需要。
答案 0 :(得分:5)
为避免使用Python子流程模块,您可以直接使用BuildOverviews function和Python API来构建概述。
from osgeo import gdal
InputImage = 'ImageName.tif'
Image = gdal.Open(InputImage, 0) # 0 = read-only, 1 = read-write.
gdal.SetConfigOption('COMPRESS_OVERVIEW', 'DEFLATE')
Image.BuildOverviews("NEAREST", [2,4,8,16,32,64])
del Image
print('Done.')
当您以只读模式读取.tiff图像时,它将在“ .ovr”文件中构建外部概览。相反,如果以读写模式打开图像,则会生成内部概览。
答案 1 :(得分:1)
更改此代码行:
call([gdaladdoFile, '-ro', '--config USE_RRD YES', 'filename', '2 4 8 16'])
对此:
call([gdaladdoFile, '-ro', '--config', 'USE_RRD', 'YES', filename, '2 4 8 16'])
解决了我的问题!