Halcon的学习过程中,关于Halcon的混合编程是无法避免的,Halcon可以和很多种语言进行混编,这里仅赘述与C#语言进行混编的一些简单方式。
C#与Halcon进行混编的方式大体可以分为:使用Halcon导出功能、面向对象的方式、Halcon引擎。
当然,除了以上方法,还有导出库工程这样的方式可以选择,这里就不再阐述。
一、Halcon导出功能
下图为使用Halcon编写的简单程序
然后点击文件-》导出,或者直接点击如下按钮
点击导出之后,选择语言为C#-Halcon/.NET,选择好导出文件的路径,则会得到一个和Halcon程序同名的.cs文件
打开.cs文件,我们看到导出的代码中有一个action的方法,这个方法是即是我们需要重点关注的部分,我们在Halcon中写的代码都在这个方法中有所实现。以下为action的代码:
1 private voidaction()2 {3
4
5 //Local iconic variables
6
7 HObject ho_Image, ho_Region, ho_ConnectedRegions;8 HObject ho_RegionDilation;9
10 //Local control variables
11
12 HTuple hv_Width = null, hv_Height = null;13 //Initialize local and output iconic variables
14 HOperatorSet.GenEmptyObj(outho_Image);15 HOperatorSet.GenEmptyObj(outho_Region);16 HOperatorSet.GenEmptyObj(outho_ConnectedRegions);17 HOperatorSet.GenEmptyObj(outho_RegionDilation);18 ho_Image.Dispose();19 HOperatorSet.ReadImage(out ho_Image, "printer_chip/printer_chip_01");20 HOperatorSet.GetImageSize(ho_Image, out hv_Width, outhv_Height);21 if(HDevWindowStack.IsOpen())22 {23 HOperatorSet.SetPart(HDevWindowStack.GetActive(), 0, 0, hv_Height, hv_Width);24 }25 ho_Region.Dispose();26 HOperatorSet.Threshold(ho_Image, out ho_Region, 128, 255);27 ho_ConnectedRegions.Dispose();28 HOperatorSet.Connection(ho_Region, outho_ConnectedRegions);29 ho_RegionDilation.Dispose();30 HOperatorSet.DilationCircle(ho_ConnectedRegions, out ho_RegionDilation, 3.5);31 if(HDevWindowStack.IsOpen())32 {33 HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());34 }35 if(HDevWindowStack.IsOpen())36 {37 HOperatorSet.DispObj(ho_ConnectedRegions, HDevWindowStack.GetActive());38 }39
40
41 ho_Image.Dispose();42 ho_Region.Dispose();43 ho_ConnectedRegions.Dispose();44 ho_RegionDilation.Dispose();45
46 }
action
现在,需要我们对这个代码进行简单的更改,就可以在C#的Halcon窗体控件中将其显示出来,首先,新建一个C#窗体程序,添加halcondotnet的引用,并且添加其命名空间,在主窗体上添加一个Halcon的窗体控件和一个Button控件,并在Button的Click事件对应的方法中添加如下代码即可:
代码如下:
1 namespaceHalconprogram2 {3 public partial classForm1 : Form4 {5 publicForm1()6 {7 InitializeComponent();8 }9
10 private void button1_Click(objectsender, EventArgs e)11 {12
13 //Local iconic variables
14
15 HObject ho_Image, ho_Region, ho_ConnectedRegions;16 HObject ho_RegionDilation;17
18 //Local control variables
19
20 HTuple hv_Width = null, hv_Height = null;21 //Initialize local