使用GDAL将U16和U8 PCIDSK层读取到numpy数组时,Python崩溃

2024-09-27 07:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

PCIDSK(通常是.pix)格式允许在同一个文件中保存具有多种数据类型的带区。我的文件包含“U16”、“U8”和“BIT”通道。在

GDAL能够正确解释数据集:

ds = gdal.Open("myfile.pix") 
    for i in range(1,ds.RasterCount+1):     
        print ds.GetRasterBand(i).DataType, ds.GetRasterBand(i).GetDescription()

它将“U16”带解释为gdalconst.GDT_UInt16(2),“U8”和“BIT”解释为gdalconst.GDT_Byte(1)。我可以看到所有的乐队从原始文件,在正确的顺序,正确的乐队名称。在

问题是当我试图将数据提取到numpy数组时。pythonw.exe当我尝试通常的ds.GetRasterBand(1).ReadAsArray()时崩溃(甚至控制台中没有错误)。在

我注意到,通过指定要提取的区域,我能够正确地提取一些数据,但是当区域包含一个特定的像素时,它仍然崩溃,这与每个文件不同。给定像素对于所有“U16”和“U8”层都有问题。在

对于文件9494(X)X 9609(Y),它仅在以下情况下失败:

^{pr2}$

对于文件9193(X)X 9293(Y),它仅在以下情况下失败:

ds.GetRasterBand(1).ReadAsArray(5376,9216,1,1)

原始数据中的像素没有什么值得注意的。我注意到,无法读取的位置将位于一个256x256瓦片的边缘。在

它似乎可以用.ReadAsArray()正确处理“位”层,但不能处理“U16”和“U8”。在

这台机器有足够的内存,我可以读取和创建更大的其他数据集。在

顺便说一句,如果有人知道如何创建具有多种数据类型的PCIDSK文件,那么我可以创建一个问题的工作示例。在

使用python2.7.11、Numpy 1.10.2、gdal绑定1.11.3。在


Tags: 文件数据dsbit像素数据类型gdalpix

热门问题