C++如何用 gdal 读取图像后转为opencv类型的完整代码
时间: 2024-05-01 21:19:19 浏览: 9
下面是使用 GDAL 读取图像并转换为 OpenCV 类型的示例代码:
```cpp
#include <iostream>
#include <gdal/gdal_priv.h>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 打开图像
GDALAllRegister();
GDALDataset *poDataset = (GDALDataset*)GDALOpen("test.tif", GA_ReadOnly);
if (poDataset == NULL) {
cerr << "Error: GDALOpen failed!" << endl;
return 1;
}
// 读取图像数据
int width = poDataset->GetRasterXSize();
int height = poDataset->GetRasterYSize();
int bands = poDataset->GetRasterCount();
GDALRasterBand *poBand = poDataset->GetRasterBand(1);
Mat img(height, width, CV_8UC1);
poBand->RasterIO(GF_Read, 0, 0, width, height, img.data, width, height, GDT_Byte, 0, 0);
// 转换为 OpenCV 类型
Mat cvImg;
cvtColor(img, cvImg, COLOR_GRAY2BGR);
// 显示图像
namedWindow("Image", WINDOW_NORMAL);
imshow("Image", cvImg);
// 等待键盘输入
waitKey(0);
// 释放资源
GDALClose(poDataset);
return 0;
}
```
注意,需要在编译时链接 GDAL 库和 OpenCV 库。如果是 Linux 系统,可以使用如下命令编译:
```
g++ -o main main.cpp `gdal-config --cflags --libs` `pkg-config opencv --cflags --libs`
```