目前,我们看到的关于vs C#与halcon联合的介绍,大多数都是介绍vs2010的,当使用高版本的vs时,设置以及代码处理上会有一些区别。当下这篇文章各种参数如下:
操作系统:Win10 64位
VS版本:VS2013
halcon版本:halcon12.0 halcon的安装路径:D:\Program Files\MVTec
该博客的内容录制了视频,视频文件以及例程代码路径为:https://pan.baidu.com/s/1HMMNFGvPZ59uLNsfbwjQbg
需要看更多的halcon相关的文章,请关注公众号:
1. 创建C#工程
2. 工程设置参数修改
选择工程之后,右键【属性】,打开如下窗口,将【目标框架】这一项修改为.NET FrameWork3.5,。理由如下:
在halcon的安装路径:D:\Program Files\MVTec\HALCON-12.0\bin下,我们可以看到有dotnet35文件夹,并且这个版本是halcon12.0中最高的一个版本,因此对应的,我们需要在此选项中对应的选择3.5的版本。
还是在【属性】打开的窗口中,需要将【目标平台】选择为X86。理由如下:
halcon12.0提供的DLL是32位的,因此我们需要选择x86平台。
如下图所示,在【1】处填入halcon的dll所在的路径,也就是【3】所示的那个路径,然后点击【2】这个按钮,然后就可以在【3】所在的地方看到如下图所示的路径。
我们切换到工程的窗口设计,然后选择【工具箱】,选择【所有Windows窗体】中的任何一项,然后右键,选择【选择项...】
然后,可以打开如下窗口,我们在窗口中查看,是否有名称为HwindowControl的项,并且是否选中(前面是否画勾),如果没有,那么点击【浏览...】,依然到halcon的安装路径下选择路径:D:\Program Files\MVTec\HALCON-12.0\bin\dotnet35下的halcondotnet.dll,然后即可看到HWindowControl被选中了。
关于工具箱这个设置,是为了我们在窗口设计的时候,能够有halcon的控件可以使用,通过以上操作,我们可以在工具箱->所有Windows窗体中,一般是最后一个控件有HWindowControl控件。
3. halcon代码的导出:
halcon测试代码如下:
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'E:/halcon实战/muban_1.jpeg')
dev_display(Image)
get_image_size(Image, Width, Height)
rgb3_to_gray(Image, Image, Image, ImageGray)
dev_display(ImageGray)
在halcon窗口中,选择左上角的【文件】-》【导出】,打开如下窗口:
选择C#文件的保存位置后,按照上图所示,选择相应的选项后,点击【导出】,即可在所选择的保存文件夹下找到导出的C#文件。
导出的C#文件中,代码如下:
using System;
using HalconDotNet;
public partial class HDevelopExport
{
public HTuple hv_ExpDefaultWinHandle;
// Main procedure
private void action()
{
// Local iconic variables
HObject ho_Image, ho_ImageGray;
// Local control variables
HTuple hv_Width = null, hv_Height = null;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.GenEmptyObj(out ho_ImageGray);
//dev_open_window(...);
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, "E:/halcon实战/muban_1.jpeg");
HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
ho_ImageGray.Dispose();
HOperatorSet.Rgb3ToGray(ho_Image, ho_Image, ho_Image, out ho_ImageGray);
HOperatorSet.DispObj(ho_ImageGray, hv_ExpDefaultWinHandle);
ho_Image.Dispose();
ho_ImageGray.Dispose();
}
public void InitHalcon()
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("width", 512);
HOperatorSet.SetSystem("height", 512);
}
public void RunHalcon(HTuple Window)
{
hv_ExpDefaultWinHandle = Window;
action();
}
}
4. 将halcon导出的C#代码加入C#工程
我们可以看到,halcon导出的代码,类名为:HDevelopExport,在这个类中,有3个成员函数,一个成员变量。接下来,我们就需要将这些代码添加到C#工程中。
首先,我们需要在界面上添加两个控件,一个是halcon的控件,另外一个是button控件,如下图所示:
接下来,我们先将halcon导出代码HDevelopExport类的代码添加到如下位置:
接下来,我们在button的click函数中,添加代码,如下所示:
private void button1_Click(object sender, EventArgs e)
{
HDevelopExport HD = new HDevelopExport();
HD.RunHalcon(hWindowControl1.HalconWindow);
}
接下来,我们还需要添加halcon类的引入,如下所示:
5.编译、调整、运行
直接编译,我们会发现有如下错误提示:
出现此错误提示,我们需要注释掉两个地方的代码:
第一个是,如下图所示:
第二个是,如下图所示:
编译成功后,在我们运行程序之前,需要做一个事情:将D:\Program Files\MVTec\HALCON-12.0\bin\dotnet35下的所有dll文件拷贝到工程目录testHalcon\testHalcon\bin\Debug下。
然后运行程序,点击如下图所示的【图像】按钮,即可看到显示的图像:
至此,我们halcon导出的C#代码就可以正确执行了。