使用模板函数进行遥感图像处理

来源:互联网 发布:沈阳电明数据恢复 编辑:程序博客网 时间:2024/06/05 15:28

开发环境:win7,GDAL,VS2010,QT4.7

遥感图像的数据类型多种,如何使用模板函数进行方便处理呢?我的处理方式如下:

class c {public:void computeScatter(int nBandx,int nBandy,int xScale,int yScale, QVector<QVector<int>> &vecScatter,double *pMinMaxX,double *pMinMaxY);private: template <class T>  void computeScatterPriv(int nBandx,int nBandy,int xScale,int yScale, QVector<QVector<int>> &vecScatter,double *pMinMaxX,double *pMinMaxY);}C::computeScatter(int nBandx,int nBandy,int xScale,int yScale, QVector<QVector<int>> &vecScatter,double *pMinMaxX,double *pMinMaxY){ int nBandCount=getBandCount();   if(nBandCount<=0)    return ;   int dataType=getDataType(nBandx);   switch(dataType)   {   case GDT_Byte:    computeScatterPriv<unsigned char>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);    break;   case GDT_UInt16:     computeScatterPriv<unsigned short int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);    break;   case GDT_Int16:       computeScatterPriv<short int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);    break;   case GDT_UInt32:       computeScatterPriv<unsigned  int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);    break;   case GDT_Int32:       computeScatterPriv<int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);    break;   case GDT_Float32:     computeScatterPriv<float>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);    break;   case GDT_Float64:     computeScatterPriv<double>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);    break;   }}  template <class T>void C::computeScatterPriv(int nBandx,int nBandy,int xScale,int yScale, QVector<QVector<int>> &vecScatter,double *pMinMaxOutX,double *pMinMaxOutY) {   T*=new T[20];//......//自己的处理//.... }

 

在使用时使用调用computeScatter函数即可,可以对不同数据类型的遥感数据进行处理。

注意:写加减乘除时要注意越界的问题,具体请看一个使用模板函数进行遥感图像处理易犯但不易调试的错误

 

4 0