Halcon 与 C# 混合编程

1.新建一个Windows窗体应用程序,命名为Demo

Halcon 与 C# 混合编程_第1张图片

2.添加Halcon组件

右键引用 -> 选择添加引用:

Halcon 与 C# 混合编程_第2张图片

 选择浏览:

Halcon 与 C# 混合编程_第3张图片

在你自己Halcon的安装路径下,找到bin/dotnet35/,选择halcondotnet.dll文件,点击确定:

Halcon 与 C# 混合编程_第4张图片

确定后,会在解决方案下引用列表中找到我们刚刚添加的halcon组件:

Halcon 与 C# 混合编程_第5张图片

3.更改框架

右键工程 -> 属性,打开属性设置:

Halcon 与 C# 混合编程_第6张图片

这里单击目标框架下拉框,如果目标框架是.NET Framework 4 Client Profile,需点击下拉框将其改为.NET Framework 4。否则可能会报错:warning MSB3253: 未能解析引用的程序集“halcondotnet”,因为它对不在当前目标框架“.NETFramework,Version=v4.0,Profile=Client”中的“System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”具有依赖关系。请删除对不在目标框架中的程序集的引用,或考虑重新确定项目的目标。

Halcon 与 C# 混合编程_第7张图片

4.添加halcon的窗口控件

右键工具箱 -> 选择项:

Halcon 与 C# 混合编程_第8张图片

弹出一个选择工具项项对话框,点击浏览按钮:

Halcon 与 C# 混合编程_第9张图片

在你自己halcon安装目录下的/bin/dotnet35/文件加下,添加halcondotnet.dll组件:

Halcon 与 C# 混合编程_第10张图片

然后.NET Framework组件中就会自动添加上HSmartWindowControl和HWindowControl两个组件,点击确定:

Halcon 与 C# 混合编程_第11张图片

此时,工具箱 - > 常规选项中就会出现两个添加的halcon窗口控件:

Halcon 与 C# 混合编程_第12张图片

这里,我们选择HWindowControl窗口控件在主窗口中拖出一个窗口,同时添加两个按键:

Halcon 与 C# 混合编程_第13张图片

 

5.下一步,我们从Hdevelp中导出已经写好的Halcon程序。

这里用halcon中自带的例程lines_gauss为例:

HDevelop中打开程序lines_gauss,点击文件 -> 导出,按照下图的配置选项进行选择:

Halcon 与 C# 混合编程_第14张图片

右键Demo工程,添加 -> 现有项,找到刚刚我们导出的lines_gauss.cs文件,并点击确定:

 Halcon 与 C# 混合编程_第15张图片

6.打开lines_gauss.cs文件,修改部分代码如下:

public void RunHalcon(HTuple Window, HObject srcImage)
{
    hv_ExpDefaultWinHandle = Window;
    action(srcImage);
}

private void action(HObject ho_srcImage)
{
    // ho_Angio.Dispose();    // 注释掉这两句
    // HOperatorSet.ReadImage(out ho_Angio, "angio-part");
    ho_Angio = ho_srcImage;
}

7.打开主程序,添加引用,using HalconDotNet; 同时添加以下的按钮事件代码:

private HObject ho_srcImage = null;
private HDevelopExport m_objHalcon = new HDevelopExport();
private void m_btn_Load_Click(object sender, EventArgs e)
{
    HTuple hv_Height = 0, hv_Width = 0;
    openFileDialog1.InitialDirectory = System.AppDomain.CurrentDomain.ToString();
    openFileDialog1.Filter = "(*.png,*.jpg,*.bmp,*.jpeg)|*.png;*.jpg;*.bmp;*.jpeg|All files (*.*)|*.*";
    openFileDialog1.FilterIndex = 1;
    openFileDialog1.RestoreDirectory = true;

    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        HOperatorSet.ReadImage(out ho_srcImage, (HTuple)openFileDialog1.FileName);
        HOperatorSet.ClearWindow(hWindowControl1.HalconWindow);
        HOperatorSet.GetImageSize(ho_srcImage, out hv_Width, out hv_Height);
        HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, hv_Height - 1, hv_Width - 1);
        HOperatorSet.DispObj(ho_srcImage, hWindowControl1.HalconWindow);    

     }
}
private void m_btn_Run_Click(object sender, EventArgs e)
{
    if (ho_srcImage != null)
    {
        m_objHalcon.RunHalcon(hWindowControl1.HalconWindow, ho_srcImage);
    }
}

8.保存并运行程序,点击加载图片按钮,图像处理按钮

选择C:\Users\Public\Documents\MVTec\HALCON-17.12-Progress\examples\images下的angio-part.png图片:

Halcon 与 C# 混合编程_第16张图片

点击图像处理按钮,最终的处理结果如下图所示:

Halcon 与 C# 混合编程_第17张图片

 


附完整工程的下载链接:

https://download.csdn.net/download/integralforlove/10834942

 

你可能感兴趣的:(Halcon)