文章目录
Halcon编程
代码导出
创建C#项目
导入Halcon控件
报错处理
显示图像
项目源码
开发环境
提前说一下,Halcon导出的代码是一个相对独立的类,但是往往我们在使用过程中只需要使用Halcon核心的代码功能就行了,不需要太复杂的周边代码;
所以此次从实用的角度来距离说明;
Halcon编程
首先在HDevelop中编写halcon算法,如下,以解析二维码为例:
*读取图像
read_image (Image, 'img.png')
*创建二维码解码模型
create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)
*解析二维码
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
*清除模型
clear_data_code_2d_model (DataCodeHandle)
运行:
代码导出
在Halcon编辑器的菜单栏依次选择 “文件 — 导出”;
在弹出的导出窗口中,选择导出路径;导出文件选择" C# - HALCON/.NET ";编码选择 " UTF-8 ";然后导出;
导出后打开文件就可以看到导出为C#的程序了;
创建C#项目
C#项目创建过程就不说了;
项目引用halcondotnet.dll,在解决方案中添加引用;
浏览,在Halcon安装路径下,文件夹 ...\bin\dotnet35 找到halcondotnet.dll;
此时已经成功引入:
导入Halcon控件
在工具箱中随便一个分类上右键 — “选择项”;
同样在Halcon安装路径下,文件夹 ...\bin\dotnet35 找到halcondotnet.dll;导入后如图:
导入后拖到界面上;
添加按钮并双击添加点击事件
添加 "using HalconDotNet; "引入halcon;
将导出的demo.cs中的 private void action() 函数复制到按钮点击事件下;可根据需要更改函数名称,这里就用action;
并添加弹出读取结果,便于直观观察;
// Main procedure
private void action()
{
// Local iconic variables
HObject ho_Image, ho_SymbolXLDs;
// Local control variables
HTuple hv_DataCodeHandle = null, hv_ResultHandles = null;
HTuple hv_DecodedDataStrings = null;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.GenEmptyObj(out ho_SymbolXLDs);
//读取图像
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, "img.png");
//创建二维码解码模型
HOperatorSet.CreateDataCode2dModel("QR Code", new HTuple(), new HTuple(), out hv_DataCodeHandle);
//解析二维码
ho_SymbolXLDs.Dispose();
HOperatorSet.FindDataCode2d(ho_Image, out ho_SymbolXLDs, hv_DataCodeHandle, new HTuple(),
new HTuple(), out hv_ResultHandles, out hv_DecodedDataStrings);
//清除模型
HOperatorSet.ClearDataCode2dModel(hv_DataCodeHandle);
ho_Image.Dispose();
ho_SymbolXLDs.Dispose();
//弹出解码结果
MessageBox.Show("解码结果:"+ hv_DecodedDataStrings);
}
报错处理
运行程序,此时会出现报错:试图加载格式不正确的程序
VS菜单 " 生成 — 配置管理器 " ,选择 “ 活动解决方案平台 — 新建 ”;
弹出窗口中,新建x64平台;然后确定;
此时已将平台切换为x64;
运行程序,点击按钮,便可以弹出来解码结果;
记得将图片放到运行目录下,并命名为 “img.png”
显示图像
这里只是读出了结果,没有显示图像,现在添加显示图像程序:
//显示图像 hWindowControl1.HalconWindow为界面上那个窗口的句柄
HOperatorSet.DispObj(ho_Image, hWindowControl1.HalconWindow);
注意要加在 ho_Image.Dispose(); 之前,此句是释放图像的意思;很好理解,图像释放之前显示;
再次运行:
项目源码
Github:lizhifun / CSHalconDemo
开发环境
OS:Win10家庭中文版
Halcon:Halcon 12.0
VS:VS Professional 2017