OpenCV3.0 使用GDAL例程
OpenCV3.0 开始逐步加入对GDAL的支持,为了进一步学习,先尝试了下OpenCV3.0库里提供的一个例子。
源码我不在贴出来了,大家到这里看就好。
程序的输入为一张影像图和一张DEM图。在读入图像时,要想例程中一样,在imread()函数中加入flag标签,表明我们要使用GDAL取读取影响。
两个数据读取函数如下:
cv::Mat image = cv::imread("in.jpg", cv::IMREAD_LOAD_GDAL | cv::IMREAD_COLOR );
cv::Mat dem = cv::imread("N37W1231.tif", cv::IMREAD_LOAD_GDAL| cv::IMREAD_ANYDEPTH);
其他主要函数:
1、cv::Point2d pixel2world( const int& x, const int& y, const cv::Size& size )
该函数完成了由影像图的像素坐标到世界坐标的转换,利用的是双线性插值算法。2、
cv::Point2d world2dem( cv::Point2d const& coordinate, const cv::Size& dem_size)
该函数完成了由世界坐标向DEM中像素坐标系的转换。
1,2两个函数建立起来影像中像素坐标与DEM中像素坐标的联系。
其余的函数就是完成了一个颜色映射表,依据高程信息,分级填充输出像素的BGR值。
调试这个代码时,有以下两点要注意:
1、DEM数据N37W123.hgt,不能用imread()函数直接读取。需要你使用ArcGIS或ENVI等软件转换为*.tif格式数据才能读取。
2、 if( dem.type() != CV_16SC1 ){throw std::runtime_error("DEM image type must be CV_16SC1"); }
我读取的GIF文件,不满足此if判断,为了程序运行采用了简单粗暴的方法,直接删除了这条if判断。
为方便大家学习,影像和DEM数据大家可以到这里下载,已经转成了tiff格式。
http://pan.baidu.com/s/1pJNqxy7
输入的影像数据:
输入的DEM数据(截图):
实验结果图: