【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
了解了qmacvisual的配置之后,正常来说,我们需要了解下不同插件的功能是什么。不过我们不用着急,可以继续学习下qmacvisual的三个特色,分别是链接属性、功能拓展和脚本处理。了解好这三个特色,对于我们进一步的插件算法学习和部署,其实是非常有利的。
1、链接属性
所谓的链接属性,其实和图像处理的特殊性有一定的关系。一般的图像算法,或者说图像处理流程,后面算法的输入往往是前面图像的输出。所以,从这一点来说,这对软件设计来说就非常方便、非常友好。因为,fae自己就可以编辑流程,自由选择图像的输出结果。当然,这种链接不仅仅是图像,还有可能是全局变量,这一点在前面已经提到过。
2、算法插件拓展
我们知道,现有的图像处理算法不可能满足所有的客户场景。总有一些特殊的场景、特殊的需求,依靠现在的算法或者说插件,是没有办法满足的。所以,这个时候,qmacvisual也为我们提供了类似的机制。我们只需要按照模板去编写代码,这样就可以生成对应的dll。而且,后续dll开发的同学哪怕不知道整个软件的架构,也能根据模板,在短时间内开发出插件,满足客户的要求,这一点是非常重要的。
3、脚本编写
之前在讲解全局变量的时候,就说过脚本处理数据的事情。整个处理流程是这样的,某一个算法或者模块拿到数据之后,再送往另外一个模块之前需要进行某种计算,或者是某种条件判断。那么这种计算,或者是条件判断,写起来可能又不是很复杂,根本没有达到插件编写的程度,所以这个时候用脚本来进行处理是比较合适的。目前来说,qmacvisual支持java script脚本,脚本的内容是这样的,
//示例1
var state = true;
if (state == true)
{ProjectSetGlobalValue("变量名", "值");
}//示例2
for (var i=0;i<3;i++)
{LogInfo(GetCurrentTime());
}//示例3(数组类型)
var array= ProjectGetGlobalValue("变量名");
var count = GetArraySize(array);
for (var i=0;i<count;i++)
{LogInfo(ConvertToArrayFloat(array, i));
}//示例4(QPoint或cv::Point类型)
var p = ProjectGetGlobalValue("变量名");
var p_x = ConvertToPoint(p, "x");
var p_y = ConvertToPoint(p, "y");//示例5(QPointF或cv::Point2f类型)
var p2f = ProjectGetGlobalValue("变量名");
var p2f_x = ConvertToPoint2f(p2f, "x");
var p2f_y = ConvertToPoint2f(p2f, "y");//示例6(cv::Point3f类型)
var p3f = ProjectGetGlobalValue("变量名");
var p3f_x = ConvertToPoint3f(p3f, "x");
var p3f_y = ConvertToPoint3f(p3f, "y");
var p3f_z = ConvertToPoint3f(p3f, "z");//示例7(cv::Point3d类型)
var p3d = ProjectGetGlobalValue("变量名");
var p3d_x = ConvertToPoint3d(p3d, "x");
var p3d_y = ConvertToPoint3d(p3d, "y");
var p3d_z = ConvertToPoint3d(p3d, "z");//示例8(Float[]类型)
var array_float = ProjectGetGlobalValue("变量名");
var f_element = ConvertToArrayFloat(array_float, 0); //0表示获取数组索引0位置的值//示例9(Double[]或vector<Double>类型)
var array_double = ProjectGetGlobalValue("变量名");
var d_element = ConvertToArrayDouble(array_double, 0); //0表示获取数组索引0位置的值//示例10(vector<QString>类型)
var code = GetFlowToolValue("条形码识别.条形码");
var str = ConvertToArrayQString(code, 0); //0表示获取数组索引0位置的值//示例11(vector<cv::Point2f>类型)
var center_points = GetFlowToolValue("轮廓特征选择.重心");
var p1_x = ConvertToArrayCvPoint2f(center_points,0, "x"); //0表示获取数组索引0位置的值
var p1_y = ConvertToArrayCvPoint2f(center_points,0, "y"); //0表示获取数组索引0位置的值//示例12(QVector<Bool>类型)
var input = GetFlowToolValue("通用I/O.输入点");
var state = ConvertToArrayBool(input, 0); //0表示获取数组索引0位置的值//示例13(QVector<int>类型)
var plc = GetFlowToolValue("PLC通信.寄存器读取数据");
var data = ConvertToArrayInt(plc, 0); //0表示获取数组索引0位置的值
其中脚本的编写窗口如下所示,一个业务流程当中也可以有多个脚本。