• GDAL库——读取图像并提取基本信息


    GDAL库是一个跨平台的栅格地理数据格式库,包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。它使用了一个单一的抽象数据模型就支持了大多数的栅格数据。这里有GDAL库支持的格式:http://www.gdal.org/formats_list.html

    注:本文在Qt开发环境下使用GDAL库。

    在Qt中使用GDAL库时,除了要加gdal_priv.h头文件外,还需要在xxx.pro文件内加上LIBS += -lgdal ,文件用可编辑的文档打开。

    使用GDAL时首先对文件格式进行注册,这里我们对所有支持的文件安格式进行注册:GDALAllRegister()

    注册后用数据集对象指向打开的数据文件,就实现了数据的读取,如下:

        GDALAllRegister();    
        GDALDataset *poDataset;
    QString filename;
    filename=QFileDialog::getOpenFileName(this,
    tr("Choose Images"),
    tr("All Fles (*.*)"));
    //Open the image
    QByteArray ba = filename.toLatin1();
    poDataset = (GDALDataset*) GDALOpen( ba.data(),GA_ReadOnly );

    注意上面还需要将QString转化为char*类型,以保证函数参数类型一致。

    1.获取图像的基本信息

    采用GDAL读取图像成功后,可以获取图像的一些基本信息,如下:

    描述信息:const char*  GDALDataset::GetDriver()->GetDescription(),通常是图像的格式

    图像大小:  图像宽度  int  GDALDataset::GetRasterXSize()

                       图像高度  int   GDALDataset::GetRasterYSize()

    波段数:int   GDALDataset::GetRasterCount()     波段数即图像每个像素点所含的颜色种类,物理中的光学中学过颜色就是某频率的光波。波段少则一个,多则很多个,在遥感影象中波段通常有多个。

    投影信息:GDALDataset::GetProjectionRef()    有的图像没有投影信息,不如一般的JPG、BMP格式图像。

    地理坐标信息:double adfGeoTransform[6]   

                            GDALDataset::GetGeoTransform(adfGeoTransform)

                     地理坐标信息是一个含6个double型数据的数组,adfGeoTransform[1]和adfGeoTransform[5]表示东西和南北方向一个像素对应的距离,adfGeoTransform[0]和adfGeoTransform[3]表示左上角的坐标。

    波段信息:数据集中重要的信息,有波段尺寸、数据类型、颜色信息等。

               获取波段的方法: GDALRasterBand *poBand;

                                     poBand = poDataset->GetRasterBand(i)     poBand为指向第i个波段的指针

    波段尺寸:int   poBand->GetXSize()

                     int   poBand->GetYSize()

    数据类型:const char*   GDALGetDataTypeName(poBand->GetRasterDataType())    

    颜色信息:const char*   GDALGetColorInterpretationName(poBand->GetColorInterpretation())

    2. 将读取的图像信息显示出来

    上面了解了GDAL获得图像数据信息的方法,接下来就在Qt中对数据信息进行显示

    QString strImgInfo;
    QString strImgFormat =
    poDataset->GetDriver()->GetDescription();
    strImgInfo.append(tr("Descreption: ")+strImgFormat+"\n");

    类似上面这样,Qt中的QString类有类似于向量的功能,可以用append函数再字符串后面添加新的字符串

    信息获取完后显示:ui->label->setText(strImgInfo);

  • 相关阅读:
    算法25-----位运算(2)-----案例
    算法24----重复子字符串
    算法23-------岛屿的最大面积 LeetCode 695
    算法22-----托普利茨矩阵leetcode766
    算法21----重塑矩阵 LeetCode566
    Python笔记25-----------创建二维列表【浅copy】和转置
    TensorFlow+实战Google深度学习框架学习笔记(7)-----队列与多线程
    TensorFlow+实战Google深度学习框架学习笔记(6)----神经网络经典损失函数
    Testing
    Spark简介
  • 原文地址:https://www.cnblogs.com/Romi/p/2396627.html
Copyright © 2020-2023  润新知