视觉运控平台软件框架(4)---图像处理ImageProcessModule

视觉运控平台软件框架(4)---图像处理ImageProcessModule

现在主流的思想是图像处理分定位,检测,测量,识别四部分。很多公司的视觉软件不同的图像处理方式是分成多个模块的DLL,我现在写的图像处理部分算子不多,只做一个动态库导出,后面添加的图像处理可以考虑分多个模块。

BaseOperator:图像处理算子基类,所有的算子继承自这个类,为什么这样呢,一方面因为在一个流程中有多个算子,这里用多态的方式把不同的算子加入到流程中,统一的执行方式。另一方面在做序列化和反序列化的时候也是要用多态的方式的。

DataFactory:流程序列化和反序列化的工厂类,这里把算子序列化成Json文件,序列化成Json文件的好处是能很好的向后兼容,当程序更改之后,添加或删除了某个变量并不会影响原有程序的反序列化。还有就是序列化出来的文件能清晰知道参数变量的值。

 

以下是序列化出来的流程结构,文件参数清晰

视觉运控平台软件框架(4)---图像处理ImageProcessModule

Inspection:导出的流程类,往流程中可以添加算子。目前流程只能支持顺序执行,不能分支执行。如果需要改成分支执行流程,可以通过设置算子的后续节点的方式来实现。把每个算子添加到链表中在执行的过程中设置后继节点。流程中支持算子的增删与交换位置等操作。

视觉运控平台软件框架(4)---图像处理ImageProcessModule

 

FindLine,FindLineOperator:直线查找算子,通过多个卡尺找到多个点后拟合成一条直线,在定位中会有用。这里算法后续考虑全用opencv实现,拒绝封装Halcon.

这里添加算子是很简单的,只需把需要封装的算法继承自算子基类BaseOperator,实现其全部的虚函数即可,需要序列化的还需要添加相应的序列化和反序列化函数,扩展性还不错。

InspectionDialog流程窗口,以上算子跟流程是完全脱离界面编写的,可以轻松实现后台执行。下面是流程的配置窗体,左上工具栏是对流程序列化文件的操作,可存可读,左下读入测试图片路径,在路径下可直接跳转上下一张图片。右边是流程编辑窗口,直接拖拽添加。

视觉运控平台软件框架(4)---图像处理ImageProcessModule

 

FindLineWidget:直线查找窗体,对直线查找参数的设置。

视觉运控平台软件框架(4)---图像处理ImageProcessModule

查找直线的控件用QGraphicsItem实现,可用鼠标拖拽操作。

这里实现了很多的GraphicsItem,后续添加的所有算子图像上的所有图元都以GraphicsItem的方式呈现。包括图像上的文字,ROI,尺度等等,用GraphicsItem做人机交互操作起来相比直接在Opencv mat图像上绘制要方便一些。

视觉运控平台软件框架(4)---图像处理ImageProcessModule