使用GDAL读取影像

最近在学习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将图像显示在窗口中,以后继续更新。。。原文链接: https://www.cnblogs.com/femglong/archive/2011/05/18/2049474.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/25711

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午3:29
下一篇 2023年2月8日 上午3:30

相关推荐