使用GDAL读取影像
时间:2011-05-18 来源:FemgL
最近在学习GDAL和opencv,GDAL的强大功能我就不用说了,大家上网可以查到很多关于它的资料。opencv是一个开源的计算机视觉库,可以去opencv中文论坛具体了解它,http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5
说下我的构思吧,opencv库里有很多关于数字图像处理的函数,但是它却局限于遥感图像的读取,而GDAL却对遥感影像的读取支持的很好,所有我想用GDAL将遥感影像读入,转成矩阵,传递到opencv中,然后使用opencv的函数来处理,不知道这个想法怎么样,还希望各位能指点。下面是c++代码:
#include <iostream> #include "ogr_geometry.h" #include "cpl_string.h" #include "gdal_priv.h" #include "cv.h" #include "highgui.h" using namespace std; int main() { //------------GDAL--------------// //注册驱动 GDALAllRegister(); GDALDataset *poDataset; //打开文件 poDataset = (GDALDataset *) GDALOpen(filename, GA_ReadOnly); //获取影像大小 int xSize = poDataset->GetRasterXSize(); int ySize = poDataset->GetRasterYSize(); cout<<"XSize:"<<xSize<<", YSize:"<<ySize<<endl; //缓存大小,也是图像显示在窗口中大小 int xBuff = xSize; int yBuff = ySize; //波段 int nBand = 1; float *pBuffer; pBuffer = (float*)CPLMalloc(sizeof(float)*(xBuff)*(yBuff)*(nBand)); //使用RasterIO()读取 poDataset->RasterIO(GF_Read, 0, 0, xSize, ySize, pBuffer, xBuff, yBuff, GDT_Byte, nBand, NULL, 1, 0, 1); //先高后宽 //---------------opencv----------------// //创建一个矩阵 CvMat rotmat; cvInitMatHeader(&rotmat, yBuff, xBuff, CV_8UC1, pBuffer); //先宽后高。 宽:row=yBuff, 高:col=xBuff //检查一下 cout<<"row:"<<cvGetDimSize(&rotmat, 0)<<", col:"<<cvGetDimSize(&rotmat, 1)<<endl; cvNamedWindow("GDAL", 0); cvShowImage("GDAL", &rotmat); cvWaitKey(0); cvDestroyWindow("GDAL"); }现在只是使用opencv将图像显示在窗口中,以后继续更新。。。
相关阅读 更多 +