GDAL的学习——gdal转Mat

本文介绍了如何利用GDAL读取图像并转换为OpenCV的Mat类型,以便进行图像处理,同时提供将处理后的Mat图像转换回GDAL并保存的方法。注意在转换过程中,图像数据类型和地理坐标需保持一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看了网上众多的资料,发现gdal对于图像处理不是那么的方便,遂选择使用opencv实现对图像的处理,但是opencv对于图像格式的灵活度又没有gdal来的这么方便,所以将两者结合,实现最终图像处理的目的。
这里主要贴上两个函数。
第一个是将图像用GDAL读进来,然后转换成opencv的Mat型,便可以对图像的行列进行灵活的处理。
第二个函数是将Mat类型的图像,转换成GDAL,然后再保存出来。

#include <iostream>
#include <gdal.h>
#include <gdal_priv.h>
#include <opencv.hpp>

using namespace std;
using namespace cv;

struct Info
{
   
   
 double adfGeoTransform[6] = {
   
    0 };
 const char* proj = "";
};

Mat GdaltoMat(const char*filename,Info &St);
bool MatToFile(Mat dst, Info &St, const char*outputpath);

int main()
{
   
   
 const char*img = "D:\\img.tif";
 const char*pdst = "D:\\pdst.tif";
 Info St;
 Mat dst=GdaltoMat(img, St);
 MatToFile(dst, St, pdst);
 return 0;
}

Mat GdaltoMat(const char*filename,Info &St)
### 将图像换为二维矩阵并保存或导出 在 Python 中,可以通过多种方法将图像换为二维矩阵,并将其保存到不同的文件格式中。以下是具体实现方式: #### 使用 `Pillow` 库加载图像并换为二维矩阵 Python 的 `Pillow` 是一个强大的库,用于处理图像数据。通过该库可以轻松地将图像加载为 NumPy 数组形式的二维矩阵。 ```python from PIL import Image import numpy as np # 加载图像 image = Image.open('example.jpg').convert('L') # 换为灰度图 matrix = np.array(image) print(matrix.shape) # 输出矩阵形状 (height, width) ``` 上述代码中的 `.convert('L')` 方法会将彩色图像换为灰度图像,从而得到一个二维矩阵[^1]。 --- #### 导出二维矩阵为 MATLAB 文件 (.mat) 如果希望将生成的二维矩阵导出为 MATLAB 支持的 .mat 文件,则可以使用 SciPy 提供的功能。 ```python from scipy.io import savemat # 假设 matrix 已经是一个二维数组 savemat('output_matrix.mat', {'data': matrix}) ``` 此操作会创建名为 `output_matrix.mat` 的文件,在 MATLAB 中可以直接加载并访问变量 `data` 表示原始矩阵[^2]。 --- #### 导出二维矩阵为 Excel 文件 对于某些场景下需要将矩阵存储为 Excel 文件的情况,可借助 `pandas` 和 `openpyxl` 完成这一目标。 ```python import pandas as pd df = pd.DataFrame(matrix) # 创建 DataFrame 对象 df.to_excel('output_matrix.xlsx', index=False, header=False) ``` 这段代码能够将二维矩阵写入 Excel 文件,且不会附加额外索引列或表头信息[^5]。 --- #### 导出二维矩阵为 PNG 图片 当需要可视化矩阵并将结果另存为图片时,可以选择 Matplotlib 来完成任务。 ```python import matplotlib.pyplot as plt plt.imshow(matrix, cmap='gray') plt.colorbar() plt.savefig('output_image.png', dpi=300) plt.close() ``` 这里利用了 Matplotlib 绘制热力图功能展示数值分布情况,并最终以高质量分辨率保存为 PNG 格式的静态图形文件[^3]。 --- #### 导出二维矩阵为 TIFF 文件 针对科学计算领域常见的需求——将矩阵储为地理信息系统兼容的 TIFF 数据集,则推荐采用 GDAL/OGR 扩展包执行相应流程。 ```python from osgeo import gdal import numpy as np driver = gdal.GetDriverByName('GTiff') dataset = driver.Create('output_matrix.tif', matrix.shape[1], matrix.shape[0], 1, gdal.GDT_Float32) dataset.GetRasterBand(1).WriteArray(matrix) # 设置投影坐标系(此处省略) dataset.FlushCache() del dataset ``` 以上脚本片段展示了如何基于输入的 Numpy Array 构建一个新的 GeoTIFF 文档实例[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值