影像处理第二篇之波段运算(软件插件篇)

it2023-07-19  68

影像处理第二篇之波段运算

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 /*IRASTERPROCESS*/ BEGIN_DOX_NAMESPACE class RasterProcessBandOperator : public IRasterProcess { REGISTER_ACTUALIZE(RasterProcessBandOperator, IRasterProcess) public: /* @接口 默认构造函数 * @类名 [RasterProcessBandOperator] * @作者 杨发荷RasterDataConvert * @邮箱 575814050@qq.com * @时间 2020年3月14号 */ RasterProcessBandOperator(); /* @接口 默认构造函数 * @类名 [RasterProcessBandOperator] * @作者 杨发荷 * @邮箱 575814050@qq.com * @时间 2020年3月14号 */ ~RasterProcessBandOperator(); /* @接口 数据处理名称 * @类名 [RasterProcessBandOperator] * @作者 杨发荷 * @邮箱 575814050@qq.com * @时间 2020年10月11日 */ virtual QString processName(); /* @接口 处理完之后的波段集合索引 * @类名 [RasterProcessBandOperator] * @作者 杨发荷 * @邮箱 575814050@qq.com * @时间 2020年10月19日 */ virtual IntsArray processBandMap(int); /* @接口 处理的块的大小 * @类名 [RasterProcessBandOperator] * @作者 杨发荷 * @邮箱 575814050@qq.com * @时间 2020年10月11日 */ virtual int2 processBlockSize(int, int); /* @接口 影像处理之后的大小 * @参数 int 原图像宽度 * @参数 int 原图像高度 * @参数 int2 处理之后的图像大小 * @类名 [RasterProcessBandOperator] * @作者 杨发荷 * @邮箱 575814050@qq.com * @时间 2020年10月13日 */ virtual int3 saveRasterSize(int, int, int); /* @接口 数据处理接口 * @参数 cv::Mat 待处理影像数据 * @参数 cv::Mat 处理完影像结果 * @类名 [RasterProcessBandOperator] * @作者 杨发荷 * @邮箱 575814050@qq.com * @时间 2020年10月9日 */ 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 /*MODULEMACRO_CORE_H*/ #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、浏览软件之后的数据

最新回复(0)