使用Python和GDAL进行图像处理

0 投票
1 回答
682 浏览
提问于 2025-04-17 13:39

我有一个数据库目录,它可以读取图片的路径以及其他一些属性。在代码中有一部分是尝试打开数据集,这样如果打开成功,后面的处理就可以继续进行。但是我遇到了一个问题,就是不知道怎么让程序在遇到无法打开的图片后继续执行。现在代码运行得很顺利,但当它遇到一张打不开的图片时,就会停止,而不是回到开头重新读取数据库并尝试打开下一张图片。

try:  
    hDataset = gdal.Open( pszFilename, gdal.GA_ReadOnly )  
    except IOError:  
    print("gdalinfo failed - unable to open '%s'." % pszFilename )  
    status = "UPDATE %s SET job = 11  WHERE id = %s" % (table,row[2])  
    setstatus = conn.cursor()  
    setstatus.execute(status)  
    conn.commit()  
    setstatus.close()  
else:  
    print "file opened sucessfully"  
    hDataset.close()

1 个回答

0

GDAL 通常不会抛出异常,这点有点遗憾。如果你开启了 gdal.UseExceptions(),它有时会抛出 RuntimeError(仅此而已!),但我发现这个功能并不是很可靠。

在使用 GDAL 的一些函数时,如果操作失败,它们会返回 None,而其他一些函数则会返回一个状态整数,0 表示成功,非零则表示出错。

我常用的一种典型写法是这样的:

hDataset = gdal.Open(pszFilename, gdal.GA_ReadOnly)
if hDataset is None:
    raise IOError("Could not open '%s'" % (pszFilename,))

band_num = 1
band = hDataset.GetRasterBand(band_num)
if band is None:
    raise AttributeError("Raster band %s cannot be fetched" % (band_num,))
...

撰写回答