影像处理第二篇之波段运算
1、插件编写教程2、影像插件基类讲解3、波段运算3.1、波段运算文件3.2、波段运算源文件
4、注册波段运算类5、添加波段运算函数6、注册波段运算命令7、执行波段运算功能7.1、选择数据7.2、选择保存的文件7.3、浏览软件之后的数据
1、插件编写教程
2、影像插件基类讲解
3、波段运算
3.1、波段运算文件
#ifndef IRASTERPROCESS_H
#include
"seed_rastercore/irasterprocess.h"
#endif
BEGIN_DOX_NAMESPACE
class RasterProcessBandOperator
: public IRasterProcess
{
REGISTER_ACTUALIZE(RasterProcessBandOperator
, IRasterProcess
)
public:
RasterProcessBandOperator();
~RasterProcessBandOperator();
virtual QString
processName();
virtual IntsArray
processBandMap(int);
virtual int2
processBlockSize(int, int);
virtual int3
saveRasterSize(int, int, int);
virtual bool
rasterProcess(const cv
::Mat
&, cv
::Mat
&);
};
END_DOX_NAMESPACE
3.2、波段运算源文件
BEGIN_DOX_NAMESPACE
RasterProcessBandOperator
::RasterProcessBandOperator()
: IRasterProcess()
{
}
RasterProcessBandOperator
::~RasterProcessBandOperator()
{
}
QString RasterProcessBandOperator
::processName()
{
return QS("波段运算");
}
IntsArray RasterProcessBandOperator
::processBandMap(int bandCount
)
{
IntsArray bandMaps
; Ints bandMap
;
bandMap
<< 1 << 2; bandMaps
.append(bandMap
);
return bandMaps
;
}
int2 RasterProcessBandOperator
::processBlockSize(int xSize
, int ySize
)
{
return int3(xSize
, ySize
);
}
bool RasterProcessBandOperator
::rasterProcess(const Mat
&srcMat
, Mat
&desMat
)
{
int row
= srcMat
.rows
; int col
= srcMat
.cols
;
vector
<Mat> mats
; split(srcMat
, mats
);
if(mats
.size() != 2) return false;
desMat
= Mat(row
, col
, CV_MAKE_TYPE(srcMat
.depth(), 1));
for(int _row
= 0; _row
< row
; ++_row
)
{
for(int _col
= 0; _col
< col
; ++_col
)
desMat
.at
<double>(_row
, _col
) = fabs(mats
[0].at
<double>(_row
, _col
) - mats
[1].at
<double>(_row
, _col
));
}
return true;
}
int3 RasterProcessBandOperator
::saveRasterSize(int xSize
, int ySize
, int bSize
)
{
return int3(xSize
, ySize
, 1);
}
END_DOX_NAMESPACE
4、注册波段运算类
#ifndef MODULEMACRO_CORE_H
#include
"core/modulemacro.h"
#endif
#include
"rasterrotate.h"
BEGIN_DOX_NAMESPACE
BEGIN_DEFINE_DOX_MODULE("rastercore")
XDEFINE_CLASSMAP_ENTRY_NORMAL(RasterProcessBandOperator
)
FINISH_DEFINE_DOX_MODULE()
END_DOX_NAMESPACE
5、添加波段运算函数
void bandOperator()
{
Object
<IRasterProcess> iRasterProcess("rastercore.RasterProcessBandOperator");
Object
<IRasterProcessManager> iRaster(NIL
); iRaster
->rasterProcess(iRasterProcess
);
}
6、注册波段运算命令
void initApplication()
{
dox
::Object
<dox
::IDoxCommand
> cmd(NIL
);
cmd
->registerCommand("rastercore", "bandOperator", bandOperator
);
}
7、执行波段运算功能
7.1、选择数据
7.2、选择保存的文件
7.3、浏览软件之后的数据