1. 程式人生 > >GDAL庫——讀取影象並提取基本資訊

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);