Halcon用于开发图像处理程序时,通常需要使用其他软件编写图形化界面,Halcon提供了5种导出模板:C-Halcon/C、C++-Halcon/C++、C++-Halcon/C++(Halcon-10-legacy)、VB.NET- Halcon/.NET、C#- Halcon/.NET。
本文使用Halcon 12与Visual Studio 2017,创建基于.NET Framework 4.6.1(可以根据需要调整)的C# Windows窗口应用程序,调用导出的Halcon程序显示图片。
Halcon源程序:
*读取图片
read_image (Image, 'D:/Program Files/MVTec/HALCON-12.0/examples/images/cap_illumination/cap_illumination_05.png')
*显示图像
dev_display (Image)
创建好halcon程序后,在菜单栏找到“文件”选项下的“导出”按钮。
点击弹出如图所示对话框,选择程序导出位置以及导出语言。导出范围选择“程序”,“外部函数”选项用于导出创建的本地函数以及外部函数。
窗口导出,选择使用“导出模板”,如果选择“使用HALCON窗口”,则在程序运行时会自动创建一个Halcon的弹出窗口用于显示图像。
导出的C#程序:
// File generated by HDevelop for HALCON/DOTNET (C#) Version 12.0
//
// This file is intended to be used with the HDevelopTemplate or
// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c#
using System;
//引用halcon的.NET模块
using HalconDotNet;
//创建HDevelopExport类
public partial class HDevelopExport
{
public HTuple hv_ExpDefaultWinHandle;
//定义私有的方法
// Main procedure
private void action()
{
// Local iconic variables
HObject ho_Image;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, "D:/Program Files/MVTec/HALCON-12.0/examples/images/cap_illumination/cap_illumination_05.png");
HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
ho_Image.Dispose();
}
//初始化窗口函数
public void InitHalcon()
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("width", 512);
HOperatorSet.SetSystem("height", 512);
}
//创建公有方法RunHalcon(HTuple Window)调用私有方法action(),HTuple Window为用于显示图像的halcon窗口句柄
public void RunHalcon(HTuple Window)
{
hv_ExpDefaultWinHandle = Window;
action();
}
}
下一步,使用Visual Studio 2017创建Windows窗口应用程序。
添加引用,找到X:\...\MVTec\HALCON-12.0\bin\dotnet3文件夹下的动态连接库文件:halcondotnet.dll。
然后添加Halcon窗口控件,在工具箱选项卡中,右键点击“选择项”,弹出如下图所示窗口,点击浏览,找到X:\...\MVTec\HALCON-12.0\bin\dotnet3文件夹下的动态连接库文件:halcondotnet.dll,然后选中HWindowControl组建。
在工具箱中选择HWindowControl组建,创建halcon窗口,添加button按钮,如下图所示。
下面只需要在button按键单击事件中添加调用halcon导出程序,便可以实现显示图像的方法。
C#程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace h_show_img
{
public partial class Form1 : Form
{
HDevelopExport HDevelop=new HDevelopExport(); //添加HDevelopExport类并实例化
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
HDevelop.RunHalcon(hWindowControl1.HalconWindow); //引用RunHalcon方法显示图像,hWindowControl1.HalconWindow为创建的halcon窗口句柄。
}
}
}
运行效果如下:
注意:
1.活动解决方案平台应该与安装的halcon相对应,如本文使用的是64位的halcon,应在配置管理器中将平台目标改为x64。
2.如果想让图像适应窗口,应该在halcon中添加dev_set_part方法。