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