GDAL库学习

GDAL库学习

GDAL是一个操作栅格数据和矢量数据的库,对图像而言,可以进行包括读取、写入、转换、处理各种操作。

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)开始读入,读取影像行列数为(nXSize,nYSize) 即W,H。
(3). 678三个参数, pData为用来存储图像的数值的地方,读取则存储在pData中,写入则pData中的数据将被写入图像指定位置去,pData大小不得小于[nBufXSize, nBufYSize]
(4). nBufType用来标记pData的类型 比如pData是char,那么nBufType就是GDT_Byte,float–GDT_Float32,double–GDT_Float64
(5). nPixelSpace和nLineSpace一般默认取0,用来控制参数pData中像元的存储顺序,表示当前像素值和下一个像素值之间的间隔;当前行和下一行的间隔

配置好GDAL环境后,在c++中使用GDAL步骤为

1. 添加引用

#include "gdal_priv.h"
#include "gdalwarper.h"

2. 读取图像

	//注册所有的格式驱动
	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将二维图像保存在W
H的一维数组中,则第(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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值