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)开始读入,读取影像行列数为(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将二维图像保存在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;
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: Composite 组合模式简介与 C# 示例【结构型3】【设计模式来了_8】
〇、简介 1、什么是组合设计模式? 一句话解释: 针对树形结构的任意节点,都实现了同一接口,他们具有相同的操作,可以通过某一操作来遍历全部节点。 组合模式通过使用树形结构来组合对象,用来表示部分以及整体层次。组合模式属于结构型模式,多用于递归。 官方意图描…