GDAL读入多波段遥感影像方法以及输出的影像变成了多块的原因

来源:互联网 发布:淘宝产品拍摄技巧 编辑:程序博客网 时间:2024/05/17 14:19
这几天尝试用GDAL读入多波段遥感影像,代码如下:

 GDALAllRegister();  //注册文件格式
 CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
 GDALDriver *pDriver;
   
 const char* pInFile = "H:\\Group_code\\testdata\\wh_tiff_sub.tif";
 const char* pOutFile = "H:\\Group_code\\result\\wh_test\\wh_temp_20.tif";
 GDALDataset *pDataSet;
 GDALDataset *pOutDataSet;
 
 pDataSet = (GDALDataset*)GDALOpen(pInFile, GA_ReadOnly);
 if (pDataSet == NULL)
 {
  printf("文件无法打开!\n");
  return 0;
 }
 GDALDataType Datatype;
 int nHeight, nWidth, nBands;
 Datatype = pDataSet->GetRasterBand(1)->GetRasterDataType();  //GetRasterBand()是从1开始计数
 nWidth = pDataSet->GetRasterXSize();
 nHeight = pDataSet->GetRasterYSize();
 nBands = pDataSet->GetRasterCount(); //注意此处不是getrasterband;
 //读取影像:RasterIO
 INT16* pImageData = new INT16[nBands*nHeight*nWidth];
 pDataSet->RasterIO(GF_Read, 0, 0, nWidth, nHeight, pImageData, nWidth, nHeight,Datatype, nBands, NULL, 0, 0, 0);

主要使用了GDALDataset::RasterIO函数,这个函数详细的参数可查阅该博客:http://blog.csdn.net/liminlu0314/article/details/7072224
在这次试验中遇到了一个特别奇怪的问题,就是一幅遥感影像输入后,他被自动缩放了还变成了四份存储。

检查了很久,发现是pDataSet->RasterIO函数在设置时,我的输入影像格式Datatype为int16,而我定义的用来存储的PImageData却为int型,即32位,所以GDAL在读入时,由于这两个数据的数据格式不同,导致了这样的结果,所以我最后将PImageData定义为Uint16型,结果就没有出错了,所以大家一定要注意,在使用pDataSet::RasterIO函数时,一定要保证输入的数据类型,和用来存储数据的指针数据类型一致!!!

0 0
原创粉丝点击