影像处理第一篇之影像旋转(软件插件篇)

本文档详细介绍了如何编写一个影像处理插件,专注于影像旋转功能。从插件基类讲解,到影像旋转的头文件和源文件实现,再到注册插件、添加函数和命令,最后演示了执行影像旋转的步骤,包括选择数据、保存文件和查看结果。整个过程涵盖了影像处理的基本操作和软件集成的关键步骤。

1、插件编写教程

2、影像插件基类讲解

3、影像旋转

3.1、影像旋转头文件

#ifndef RASTERROTATE_H
#define RASTERROTATE_H

#ifndef IRASTERPROCESS_H
#include "seed_rastercore/irasterprocess.h"
#endif /*IRASTERPROCESS*/

BEGIN_DOX_NAMESPACE

class RasterRotate
	: public IRasterProcess
{
	REGISTER_ACTUALIZE(RasterRotate, IRasterProcess)

public:

	/* @接口 默认构造函数
	 * @类名 [RasterRotate]
	 * @邮箱 575814050@qq.com
	 * @时间 2020年3月14号
	 */
	RasterRotate();

	/* @接口 默认构造函数
	 * @类名 [RasterRotate]
	 * @邮箱 575814050@qq.com
	 * @时间 2020年3月14号
	 */
	~RasterRotate();

	/* @接口 数据处理名称
	 * @类名 [IRasterProcess]
	 * @邮箱 575814050@qq.com
	 * @时间 2020年10月11日
	 */
	virtual QString processName();

	/* @接口 影像处理之后的大小
	 * @参数 int 原图像宽度
	 * @参数 int 原图像高度
	 * @参数 int2 处理之后的图像大小
	 * @类名 [RasterRotate]
	 * @邮箱 575814050@qq.com
	 * @时间 2020年10月13日
	 */
	virtual int2 saveRasterSize(int, int);

	/* @接口 计算图像分块的大小
	 * @参数 int 图像宽度
	 * @参数 int 图像高度
	 * @返回 int2 图像块的大小
	 * @类名 [RasterRotate]
	 * @邮箱 575814050@qq.com
	 * @时间 2020年10月11日
	 */
	virtual int2 processBlockSize(int, int);

	/* @接口 数据处理接口
	 * @参数 cv::Mat 待处理影像数据
	 * @参数 cv::Mat 处理完影像结果
	 * @类名 [RasterRotate]
	 * @邮箱 575814050@qq.com
	 * @时间 2020年10月9日
	 */
	virtual bool rasterProcess(const cv::Mat &, cv::Mat &);

};

END_DOX_NAMESPACE

#endif /*RASTERROTATE_H*/

3.2、影像旋转源文件

#ifndef RASTERROTATE_H
#include "rasterrotate.h"
#endif /*RASTERROTATE_H*/

#include "opencvhdr.h"

BEGIN_DOX_NAMESPACE

RasterRotate::RasterRotate()
	: IRasterProcess()
{

}

RasterRotate::~RasterRotate()
{

}

QString RasterRotate::processName()
{
	return QS("影像旋转");
}

int2 RasterRotate::saveRasterSize(int xSize, int ySize)
{	
	return int2(ySize, xSize);
}

int2 RasterRotate::processBlockSize(int xSize, int ySize)
{
	return int2(xSize, ySize);
}

bool RasterRotate::rasterProcess(const cv::Mat &srcMat, cv::Mat &desMat)
{
	if(srcMat.empty()) return false;
	int cols = srcMat.rows, rows = srcMat.cols;
	desMat = Mat(rows, cols, srcMat.type());
	for(int _row = 0; _row < rows; ++_row)
	{
		for(int _col = 0; _col < cols; ++_col)
			desMat.at<double>(_row, _col) = srcMat.at<double>(_col, _row);
	}
	return true;
}
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(RasterRotate)
FINISH_DEFINE_DOX_MODULE()
END_DOX_NAMESPACE

5、添加影像旋转函数

void rasterRotate()
{
	Object<IRasterProcess> iRasterProcess("rastercore.rasterRotate");
	Object<IRasterProcessManager> iRaster(NIL);
	iRaster->rasterProcess(iRasterProcess);
}

6、注册影像旋转命令

void initApplication()
{
	dox::Object<dox::IDoxCommand> cmd(NIL);
	cmd->registerCommand("rastercore", "rasterRotate", rasterRotate);
}

7、执行影像旋转功能

7.1、选择数据

选择需要处理的影像数据

7.2、选择保存的文件

选择保存的文件

7.3、浏览软件之后的数据

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值