OpenCV实现了很多图像处理中的算法,极大的降低了我们研究中码代码的工作量,可以把更多的精力放在算法设计上。
Mat是OpenCV中最常见的数据格式,可以直接用imread函数将图像数据读取并存储为Mat格式。Mat型图像矩阵可以直接应用于OpenCV的大多数算法,例如图像形态学操作、行列号访问像素、仿射变换等。
最近在研究中,我需要读取一些多波段的tiff影像,OpenCV读取tiff的时候,有个波段数≤4的限制,这个在面对多光谱数据的时候,有点不方便。一开始我是将多波段的tiff用ENVI分成多个4波段的tiff文件导出,再多次读取,也将就着完成了研究需求。不过实现方法着实麻烦,也很不优雅。
在完成了研究所需后,再返回来看这个问题本身。我需要的是将多波段的tiff读取为Mat格式。OpenCV不能读取多波段tiff,但是GDAL可以。那我可不可以写个函数,就是用GDAL读取多波段tiff,然后输出给Mat呢?
想法有了,下面就是面向搜索引擎的编程环节了。
网上看了一圈,大概思路是GDAL循环读取tiff的每个波段,然后每个波段存储为一个单波段的Mat,然后存入vector,最后返回一个成员数量与tiff波段数相同的Mat型vector。
这边有个大佬写的特别好,也很详细,不过我还没细啃,我的代码与大佬的相比,相当于从跑车上获得灵感然后造了个自行车。这边是大佬的博客链接:https://www.cnblogs.com/zyore2013/p/5815941.html
下面是我的代码,定义了一个函数,并读取一张landsat8影像作为测试: