我想对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)
这是什么错误?
答案 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。