洛阳网站建设优化,广州培训做网站,织梦网站主页底,深圳公司建设网站GDAL库学习
GDAL是一个操作栅格数据和矢量数据的库#xff0c;对图像而言#xff0c;可以进行包括读取、写入、转换、处理各种操作。 文章目录 GDAL库学习RasterIO()函数1. 添加引用2. 读取图像3. 获取图像基本信息4. 保存输出图像5. 释放 RasterIO()函数
RasterIO(GDALRWF…GDAL库学习
GDAL是一个操作栅格数据和矢量数据的库对图像而言可以进行包括读取、写入、转换、处理各种操作。 文章目录 GDAL库学习RasterIO()函数1. 添加引用2. 读取图像3. 获取图像基本信息4. 保存输出图像5. 释放 RasterIO()函数
RasterIO(GDALRWFlag eRWFlag,int nXOff,int nYOff,int nXSize,int nYSize,void *pData,int nBufXSize,int nBufYSize,GDALDataType eBufType,int nPixelSpace,int nLineSpace)(1). 第一个参数eRWFlag 读写标记 GF_Read or GF_Write指定是读取影像还是写入影像 (2). 2345四个参数指定读写图像的范围从坐标(nXoff,nYOff)开始读入读取影像行列数为(nXSizenYSize) 即WH。 (3). 678三个参数 pData为用来存储图像的数值的地方读取则存储在pData中写入则pData中的数据将被写入图像指定位置去pData大小不得小于[nBufXSize nBufYSize] (4). nBufType用来标记pData的类型 比如pData是char那么nBufType就是GDT_Bytefloat–GDT_Float32double–GDT_Float64 (5). nPixelSpace和nLineSpace一般默认取0用来控制参数pData中像元的存储顺序,表示当前像素值和下一个像素值之间的间隔当前行和下一行的间隔
配置好GDAL环境后在c中使用GDAL步骤为
1. 添加引用
#include gdal_priv.h
#include gdalwarper.h2. 读取图像 //注册所有的格式驱动GDALAllRegister();//支持中文路径CPLSetConfigOption(GDAL_FILENAME_IS_UTF8, NO);//打开图像const char* filepath input.tif;GDALDataset* image (GDALDataset *)GDALOpen(filepath, GA_ReadOnly);以只读方式打开了路径为filepath的图像
3. 获取图像基本信息
获取图像size、图像类型、将某个波段读入 //定义图像的长宽int W image-GetRasterXSize();int H image-GetRasterYSize();int C image-GetRasterCount();GDALDataType ImgType image-GetRasterBand(1)-GetRasterDataType(); //数字图像类型//将第一个波段的影像读入到数据之中GDALRasterBand *band1 image-GetRasterBand(1); unsigned char* bdata new unsigned char[W*H]; //创建存放数据的内存//将第一波段读入band1中band1-RasterIO(GF_Read, 0, 0, W, H, bdata, W, H, ImgType, 0, 0); 在最后一行代码中读取image第一波段从像素(0,0)到(W,H)范围的数据即整张图像。读入的数据大小为(W,H) 类型为ImgType所以先定义了一个大小为(WH) 的bdata,存放其中。 需要注意的是GDAL将二维图像保存在WH的一维数组中则第(i,j)个像元为data[(j)*W i]
4. 保存输出图像 //创建保存影像数据集GDALDriver* imgDriver GetGDALDriverManager()-GetDriverByName(GTiff); //获取驱动const char* outFilename1 img2.tif;GDALDataset* outIMG1 imgDriver-Create(outFilename1, W, H, 1,ImgType, NULL);unsigned char* newdata new unsigned char[W*H];//图像处理子函数MeanFiter(输入影像,输出影像,宽,高)MeanFilter(bdata,newdata, W, H);//将处理过的图像数据写入outImg1中outIMG1-GetRasterBand(1)-RasterIO(GF_Write, 0, 0, W, H, newdata, W, H, ImgType, 0, 0);5. 释放 GDALClose(outIMG1);delete bdata;delete newdata;