GDAL库学习

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将二维图像保存在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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态的中秋爱心演示送女友用python生成爱心软件文末附c++语言写法

用python生成爱心软件 用python生成动态爱心软件 目录 用python生成爱心软件 完整代码 代码解释 逐句解释 效果展示: 如何打包 c写法 完整代码 import turtledef draw_heart():love turtle.Turtle()love.getscreen().bgcolor("black")love.…

WebSocket vs SSE: 实时数据推送到前端的选择与实现(详细)

Websocket和Server-Sent Events 对比推送数据给前端及各自的实现 二者对比WebSocket:Server-Sent Events (SSE):选择 WebSocket 还是 SSE: Websocket 实现使用原生 WebSocket API:使用 Netty 创建 WebSocket:总结和选择…

SVN 和 GIT 命令对比

参考 https://blog.csdn.net/justry_deng/article/details/82259470 # TortoiseSVN打分支、合并分支、切换分支 https://www.huliujia.com/blog/802a64152bbbe877c95c84ef2fdf3857a056b536/ # 版本控制:Git与Svn的命令对应关系 TortoiseSVN打分支、合并分支、切换…

达梦数据库修改最大连接数

达梦数据库修改最大连接数 推荐配置修改最大连接数INI参数管理 推荐配置 达梦数据库的最大连接数推荐配置与服务器内存有关。不应设置得过大,否则容易导致出现OOM。 对应关系大致如下: 服务器内存MAX_SESSIONS范围8G50~10016G100~20032G200~30064G300…

unity 实现双击物体让其隐藏,单击物体让其显示

unity 实现双击物体让其隐藏&#xff0c;单击物体让其显示 private float tapThreshold 0.25f; private float tapTimer 0.0f; private bool tap false; private void Update() { if (Input.GetMouseButtonDown(0)) { if (Time.time < this.tapTimer this.tapThreshold)…

【深度学习-注意力机制attention 在seq2seq中应用】

注意力机制 为什么需要注意力机制attention机制的架构总体设计一、attention本身实现评分函数 attention在网络模型的应用-Bahdanau 注意力加性注意力代码实现 为什么需要注意力机制 这是一个普通的seq2seq结构&#xff0c;用以实现机器对话&#xff0c;Encoder需要把一个输入的…

初识React.js

引言&#xff1a; React是一种流行的JavaScript库&#xff0c;用于构建用户界面。无论您是新手还是有一些前端开发经验&#xff0c;本文将带您了解React框架的学习过程&#xff0c;并通过具体的例子来帮助您更好地理解和应用React。 1. 背景起源&#xff1a; React是由Faceb…

Selenium+python怎么搭建自动化测试框架、执行自动化测试用例、生成自动化测试报告、发送测试报告邮件

本人在网上查找了很多做自动化的教程和实例&#xff0c;偶然的一个机会接触到了selenium&#xff0c;觉得非常好用。后来就在网上查阅各种selenium的教程&#xff0c;但是网上的东西真的是太多了&#xff0c;以至于很多东西参考完后无法系统的学习和应用。 以下整理的只是书中…

5.11.Webrtc接口的设计原理

在上节课中呢&#xff0c;我向你介绍了web rtc的接口宏&#xff0c;那有很多同学会产生疑问啊&#xff0c;那觉得web rtc为什么要把接口设计的这么复杂&#xff1f;还非要通过宏来实现一个代理类&#xff0c;再通过代理类来调用到web rtc内部。 那为什么要这么设计呢&#xf…

java微服务项目整合skywalking链路追踪框架

skywalking官网网址&#xff1a;Apache SkyWalking 目录 1、安装skywalking 2、微服务接入skywalking 3、skywalking数据持久化 1、安装skywalking 下载skywalking&#xff0c;本篇文章使用的skywalking版本是8.5.0 Index of /dist/skywalkinghttps://archive.apache.org/…

Net跨平台UI框架Avalonia入门-样式详解

设计器的使用 设计器预览 在window和usercontrol中&#xff0c;在代码中修改了控件&#xff0c;代码正确情况下&#xff0c;设计器中就可以实时看到变化&#xff0c;但是在样式&#xff08;Styles&#xff09;文件中&#xff0c;无法直接看到&#xff0c;需要使用设计器预览D…

Python新手入门

文章目录 概要python代码运行结果小结 概要 以下内容为python各种输出语句的语法&#xff01; python代码 # 标准化输出 print("这是标准化输出&#xff01;")# 格式化输出 print("这是第1种%s"%"格式化输出&#xff01;") print("这是第…

python使用execjs利用jsdom来执行含有document的js代码方案(上)

先说一下环境&#xff1a;win7 64位&#xff0c;python3.8.10。 python使用execjs执行含有document的js代码时&#xff0c;会出现报错&#xff1a; execjs._exceptions.ProgramError: TypeError: document 未定义 原因是纯js代码中是不包含浏览器里对象的(如document、windo…

python 调用adb shell

目录 python调用 bat&#xff0c;启动新窗口&#xff0c;但是不能自动在进入shell 后执行提前设置的操作。 python启动cmd新窗口&#xff0c;但是不能自动在进入shell 后执行提前设置的操作。 python调用 bat&#xff0c;启动新窗口&#xff0c;但是不能自动在进入shell 后执…

Linux--信号

对于 linux来说&#xff0c;信号是软中断。许多重要的程序都需要处理信号。信号&#xff0c;为linux提供了一种处理异步事件的方法。比如&#xff0c;终端用户输入了ctrlc来中断程序&#xff0c;会通过信号机制停止一个程序。 一、信号概述&#xff1a; 1、信号的名字和编号&a…

安装配置 hbase

目录 一 准备并解压hbase安装包 二 修改hbase-env.sh文件 三 修改hbase-site.xml 四 修改环境变量 五 启动和关闭hbase 六 简单使用 hbase 一 准备并解压hbase安装包 这里有网盘资源 链接: https://pan.baidu.com/s/1PuqLmullK70ngeVs6G2oRQ?pwdq93v 提取码: q93v 这里安…

Leetcode165. 比较版本号

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码如下&#xff1a; class Solution {public int compareVersion(String version1, String version2) {int i 0, j 0;while(i < version1.length() || j < version2.length()){long num1 0…

endnotes插入文献突然变得格式不对,而且也不是按照正常的顺序来插入解决办法

今天插入文献突然变成了endnotes里面的文献序号&#xff0c;而且也不导入了&#xff0c;多了作者和序号信息 解决办法&#xff1a; 更新一下&#xff0c;然后在进行的导入就ok了&#xff0c;能够按照以前的格式插入了&#xff0c;序号也能自动排开&#xff0c;而且也能导入文献…

Django框架学习大纲

对于使用 Python 的 Django 框架进行 web 开发的程序员来说&#xff0c;以下几点是必须了解的。 环境配置与项目初始化 命令&#xff1a; pip install django django-admin startproject myproject解析&#xff1a; 使用 pip 安装 Django。使用 django-admin startproject …

常见的内网穿透代理工具

简介 "内网穿透代理工具"是一种用于实现内网穿透的工具或软件。内网穿透是指通过公共网络&#xff08;如互联网&#xff09;将外部网络请求转发到内部私有网络的过程。在某些情况下&#xff0c;由于网络配置或安全策略的限制&#xff0c;外部网络无法直接访问内部网…