Python中的Gdal筛滤器

时间:2019-02-26 14:27:23

标签: python gdal sieve

我想对py中的分类图像进行筛分,并且尝试使用gdal筛分功能,但无法使用:

语法:

  

SieveFilter(Band srcBand,Band maskBand,Band dstBand,int阈值,   int connectedness = 4,char ** options = None,GDALProgressFunc   callback = 0,void * callback_data = None)-> int

我的代码:

gdal.SieveFilter(1 "C:/X/testX.tif",None,1 "C:/X/testX_sieved.tif",100, 8)

这是什么错误?

2 个答案:

答案 0 :(得分:1)

我认为gdal sieve命令没有有效的python绑定。我可以通过使用以下命令从命令行调用它来成功运行它:

import os, sys, subprocess
sys.path.append(r'C:\Users\*****\AppData\Local\conda\conda\envs\****\Scripts')
gm = os.path.join('C:\\','Users','*****','AppData','Local','conda','conda','envs','****','Scripts','gdal_sieve.py')
sieve_command = ["python", gm,'-st','10','-8','-nomask','-of','GTiff','to_be_sieved.tif','sieved.tif']
subprocess.call(sieve_command,shell=True)

当然,您需要在前几行中更改一些路径,以指向您的gdal脚本的存储位置。

答案 1 :(得分:0)

要在 Python 中应用筛选器,您必须为第一个和第三个参数提供光栅带。我怀疑错误的出现是因为目标带(第三个参数)不可写(即您必须以读写模式打开目标图像)。

例如覆盖原图:

from osgeo import gdal
Image = gdal.Open('SomeImageName.tif', 1)  # open image in read-write mode
Band = Image.GetRasterBand(1)
gdal.SieveFilter(srcBand=Band, maskBand=None, dstBand=Band, threshold=100, connectedness=8, callback=gdal.TermProgress_nocb)
del Image, Band  # close the datasets.

附言这适用于 Linux,gdal=3.1,python=3.9。