2016-07-09 21 views
0

Ich versuche OpenCV Beispielcode Reading Geospatial Raster files with GDAL Lese Geospatial Rasterdateien mit GDAL und OpenCV3.1.0

Für DEM-Modell zu implementieren und ausführen, herunterladen i N37W123.hgt.zip vom SRTM file located at the USGS, (die im Abschnitt dieser Seite Ergebnisse sind).

aber DAS Modell nicht zu cv::Mat dem von cv::Mat dem = cv::imread(argv[2], cv::IMREAD_LOAD_GDAL | cv::IMREAD_ANYDEPTH); geladen und ich bekomme Zeitfehler lief throw std::runtime_error("DEM image type must be CV_16SC1");

1) Warum ist das passiert?

2) Alle DEM-Datentypen sind 16 vorzeichenbehaftete Ganzzahlen. Ist es o.k?

3) Wie kann der DEM-Modellblock mit GDALDataset::RasterIO oder GDALRasterBand::ReadBlock direkt gelesen werden?

Antwort

0

gdal erwartet höchstwahrscheinlich eine HGT-Datei, keine ZIP-Datei: http://www.gdal.org/formats_list.html.

In Python Sie das Archiv extrahieren würde zuerst das zipfile Modul verwenden, dann können Sie die Datei zugreifen, direkt in eine numpy Array:

from osgeo import gdal 
ds = gdal.Open(filename) 
data = ds.ReadAsArray() 

EDIT: Du hast in einem Kommentar darauf hingewiesen, dass Sie verwenden C++, so lesen Sie das Tutorial zum direkten Lesen des Bildes: http://www.gdal.org/gdal_tutorial.html

+0

@ Benjamin 'ReadAsArray' ist für Python. In C++ können wir 'RasterIO' oder' ReadBlock' Funktionen verwenden. Der DEM-Datentyp ist 'CV_16S' oder' CV_32F'. –

+0

Sie sollten Ihre Frage dann mit C++ markieren. Unabhängig von der Sprache ist mein Punkt, dass GDAL keine ZIP-Dateien liest (mit ein paar Ausnahmen), und dass Sie OpenCV nicht benötigen, um eine Datei mit GDAL zu laden. Es wäre einfacher, das Problem zu beheben, wenn Sie einen Layer (OpenCV) entfernt und zuerst den einfacheren Ansatz versucht haben. http://www.gdal.org/gdal_tutorial.html – Benjamin

+0

@ Benjamin Ich weiß, dass GDAL Zip-Datei nicht laden konnte. Ich lade ein TIFF Bild mit GDAL und speichere es auf OpenCV Mat. aber für DEM-Dateien wie .hgt oder .TIFF konnte ich 'IMREAD_LOAD_GDAL' und' cv :: IMREAD_ANYDEPTH' nicht verwenden, die sich in 'OpenCV3.1.0' befinden –