关于软件架构,新手求指导

ccshanks 2015-03-16 04:09:03
目前在某西南某技校读研究生,本科学的是自动化。在软件架构方面基本是一张白纸,故来求指导,请不吝赐教。拜谢。
需求说明:
需要实现一个图像处理的算法平台。
输入图像格式有3种(包括3D图像,2D图像序列)。处理图像的过程分为5个以上的步奏,例如,图像M输入以后,经过第一个算法A1处理后,输出M1,接着将M1作为新的输入,经过A2处理以后输出M2。。。。。直到最终结果。
最主要的需求就是,算法A1、A2、A3。。。可以更换,即不用重新编译源代码,通过鼠标点击或者命令输入就可以确定某一个步奏的处理算法,并且每一个步奏所产生的中间结果可以保存。目前主要不知道这类算法的接口如何实现,整体架构应该注意什么。
个人觉得稍微有点复杂,请赐教!谢谢。
...全文
249 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2015-11-11
  • 打赏
  • 举报
回复
引用 12 楼 wangyaninglm 的回复:
[quote=引用 11 楼 worldy 的回复:] [quote=引用 10 楼 wangyaninglm 的回复:] 设计模式中的适配器模式?我猜测的,或者直接函数式编程啊,一个算法一个函数,一个算法一个类也行啊
所有的运算,你能穷举的完吗?[/quote] 函数模版怎么样? [/quote] 那是不是就可以把所有的函数归纳成了一个通用公式了?呵呵
shiter 2015-11-11
  • 打赏
  • 举报
回复
引用 11 楼 worldy 的回复:
[quote=引用 10 楼 wangyaninglm 的回复:] 设计模式中的适配器模式?我猜测的,或者直接函数式编程啊,一个算法一个函数,一个算法一个类也行啊
所有的运算,你能穷举的完吗?[/quote] 函数模版怎么样?
worldy 2015-11-11
  • 打赏
  • 举报
回复
引用 10 楼 wangyaninglm 的回复:
设计模式中的适配器模式?我猜测的,或者直接函数式编程啊,一个算法一个函数,一个算法一个类也行啊
所有的运算,你能穷举的完吗?
shiter 2015-03-19
  • 打赏
  • 举报
回复
设计模式中的适配器模式?我猜测的,或者直接函数式编程啊,一个算法一个函数,一个算法一个类也行啊
wshcdr 2015-03-19
  • 打赏
  • 举报
回复
引用 7 楼 u013425594 的回复:
[quote=引用 6 楼 wshcdr 的回复:] 要能动态替换的话,无非是使用plugin了,你把A1,A2,A3都做成小的插件,就可以了
请问如何做小插件,或者有什么参考的书籍,谢谢![/quote] http://www.cnblogs.com/sld666666/p/3519467.html
ccshanks 2015-03-18
  • 打赏
  • 举报
回复
引用 6 楼 wshcdr 的回复:
要能动态替换的话,无非是使用plugin了,你把A1,A2,A3都做成小的插件,就可以了
请问如何做小插件,或者有什么参考的书籍,谢谢!
版主大哥 2015-03-18
  • 打赏
  • 举报
回复
相当于可配置的流程 给你些思路:

typedef void (*PDealFunc)(void* pParam);

struct FuncNode
{
	int nIndex;

	PDealFunc pFunc;
};

void A1(void* pParam);

void A2(void* pParam);

void A3(void* pParam);

FuncNode arrayFunc[] = { {1,A1},{2,A2},{3,A3}};

void test(void* pParam)
{
	//如在配置文件中 读取的数据 
	int arrayIndex[5] = {3,2,1,3,2};

	for (int i = 0;i < 5;i++)
	{
		for (int j = 0;j < 3;j++)
		{
			if (arrayIndex[i] == arrayFunc[j].nIndex)
			{
				arrayFunc[j].pFunc(pParam);
			}
		}
	}
}
worldy 2015-03-17
  • 打赏
  • 举报
回复
每次计算结果Do就是下一个运算的Di
worldy 2015-03-17
  • 打赏
  • 举报
回复
每个算法就是一个函数,对应于1-5编号,函数的输入参数的结构和输出参数的格式应该一样 每个函数都是从DI获得输入数据,计算结果都保存到Do 根据用户指定的顺序,形成一个顺序数组,数组值1-5; 根据数组当前值调用对应函数 最后输出数据
向立天 2015-03-17
  • 打赏
  • 举报
回复
把每个算法作成独立模块 然后可以在软件里设置每个模块的执行顺序
wshcdr 2015-03-17
  • 打赏
  • 举报
回复
要能动态替换的话,无非是使用plugin了,你把A1,A2,A3都做成小的插件,就可以了
ccshanks 2015-03-16
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
利用管道操作加命令行参数很容易实现你的需求。 《Unix编程艺术》
使用管道操作符 (|)
管道操作符 (|) 可以提取一个命令的输出(默认情况下是 STDOUT),然后将其导入另
一个命令的输入中(默认情况下是 STDIN)。例如,下面的命令将对目录分类:

dir | sort

在本例中,将同时启动两个命令,但随后 sort 命令会暂停,直到它接收到 dir 命令
的输出为止。sort 命令使用 dir 命令的输出作为输入,然后将输出发送到
句柄 1(即 STDOUT)。

合并带重定向操作符的命令
可以通过合并带有其他命令和文件名的筛选器命令创建自定义命令。例如,可以使用以
下命令存储包含“LOG”字符串的文件名:

dir /b | find "LOG" > loglist.txt

dir 命令的输出通过 find 筛选器命令发送。包含字符串 "LOG" 的文件名作为文件名
列表(例如,NetshConfig.log、Logdat.svd 和 Mylog.bat)存储在文件
Loglist.txt 中。

要在相同命令中使用多个筛选器,请使用管道 (|) 分隔筛选器。例如,下面的命令将
搜索 C 盘上的每个目录以查找包含 "LOG" 字符串的文件名,并且在命令提示符窗口中
每次显示一屏:

dir c:\ /s /b | find "LOG" | more

利用管道 (|) 可以将 Cmd.exe 导向为通过 find 筛选器命令发送 dir 命令输出。
find 命令只选择包含字符串 "LOG" 的文件名。more 命令可以显示由 find 命令选择
的文件名(在命令提示符窗口中每次显示一屏)。有关筛选器命令的详细信息,请参阅
使用筛选器。

谢谢,我先去查一下资料。
赵4老师 2015-03-16
  • 打赏
  • 举报
回复
利用管道操作加命令行参数很容易实现你的需求。 《Unix编程艺术》
使用管道操作符 (|)
管道操作符 (|) 可以提取一个命令的输出(默认情况下是 STDOUT),然后将其导入另
一个命令的输入中(默认情况下是 STDIN)。例如,下面的命令将对目录分类:

dir | sort

在本例中,将同时启动两个命令,但随后 sort 命令会暂停,直到它接收到 dir 命令
的输出为止。sort 命令使用 dir 命令的输出作为输入,然后将输出发送到
句柄 1(即 STDOUT)。

合并带重定向操作符的命令
可以通过合并带有其他命令和文件名的筛选器命令创建自定义命令。例如,可以使用以
下命令存储包含“LOG”字符串的文件名:

dir /b | find "LOG" > loglist.txt

dir 命令的输出通过 find 筛选器命令发送。包含字符串 "LOG" 的文件名作为文件名
列表(例如,NetshConfig.log、Logdat.svd 和 Mylog.bat)存储在文件
Loglist.txt 中。

要在相同命令中使用多个筛选器,请使用管道 (|) 分隔筛选器。例如,下面的命令将
搜索 C 盘上的每个目录以查找包含 "LOG" 字符串的文件名,并且在命令提示符窗口中
每次显示一屏:

dir c:\ /s /b | find "LOG" | more

利用管道 (|) 可以将 Cmd.exe 导向为通过 find 筛选器命令发送 dir 命令输出。
find 命令只选择包含字符串 "LOG" 的文件名。more 命令可以显示由 find 命令选择
的文件名(在命令提示符窗口中每次显示一屏)。有关筛选器命令的详细信息,请参阅
使用筛选器。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧