项目实战 | c#与VisionPro联合编程添加图像处理算法
Posted 属老鼠的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目实战 | c#与VisionPro联合编程添加图像处理算法相关的知识,希望对你有一定的参考价值。
【往期经典】
本文的内容是增加图像处理算法并显示。增加了一个Blob算法,计算图像中斑点的数量。
图像算法使用ToolBlock集中在一起,需要在VisionPro中创建ToolBlock并存储为vpp文件备用。
ToolBlock是一组图像工具的的集合,运行ToolBlock会运行其中的所有工具。
1、载入ToolBlock
编辑好的vpp文件是ToolBlock对象的序列化文件。可以通过CogSerializer类将其载入内存,还原为对象。
CogToolBlock algorithm = CogSerializer.LoadObjectFromFile(path) as CogToolBlock;
ToolBlock中最重的是Run方法和Ran事件。Run方法是异步执行的,运行ToolBlock对象中所有的工具;Ran事件是ToolBlock执行完成的事件,可以把获取结果和更新界面的方法关联给它。
2、设计算法类
算法是一个独立的功能,要做成一个类。通常,由于不同的算法之间需要切换,需要制作一个抽象父类,各实现算法都继承自这个抽象类。
想了想,这里不需要这样做。所有的算法都是ToolBlock类,这本就是一个抽象。不同的算法以Vpp文件存储在硬盘上,可以完全使用配置文件切换不同的算法。这就是好程序的终极目标,不修改代码完成程序功能的修改。
唯一需要注意的地方是算法输出的结果格式需要定义一个统一的格式。
如果项目比较简单,可以不用添加算法类,直接使用ToolBlock类。
3、关键代码
private CogToolBlock algorithm=null;
-----------------------------------------
//载入算法
algorithm = CogSerializer.LoadObjectFromFile(path) as CogToolBlock;
algorithm.Ran += new EventHandler(Ran);
-----------------------------------------
//算法的输出
string str=algorithm.Outputs["Results"].Value.ToString();
-----------------------------------------
//算法的输入
algorithm.Inputs["InputImage"].Value=image;
algorithm.Run();
4、手把手操作主要步骤
在项目上点击右键,添加类。
指定文件名为ImageAlgorithm 。
在构造方法中载入ToolBlock文件。然后按需要添加Run、Ran和BroadCast方法。
public ImageAlgorithm(string path)
{
algorithm = CogSerializer.LoadObjectFromFile(path) as CogToolBlock;
algorithm.Ran += new EventHandler(Ran);
}
public ImageAlgorithm(string path,CogRecordDisplay display)
{
this.display = display;
algorithm = CogSerializer.LoadObjectFromFile(path) as CogToolBlock;
algorithm.Ran += new EventHandler(Ran);
}
在Form的窗口载入事件中初始化算法,关联更新界面的事件。
algoFindBlobs = new ImageAlgorithm(@"D:GitLibvpro-c-blackSubject-masteralgorithmsAlgoFindBlobs.vpp",display);
algoFindBlobs.OnResultChanged += updateUI;
增加更新界面的方法。
private void updateUI(object sender, string str)
{
Invoke(new Action(() =>
{
blResult.Text = "斑点数量:" + str;
}));
}
以上是关于项目实战 | c#与VisionPro联合编程添加图像处理算法的主要内容,如果未能解决你的问题,请参考以下文章
Halcon与C#联合编程:使用S7协议实现机器视觉上位机与西门子PLC联动