所用软件为:Halcon 18.05 + Visual studio 2015
1.在halcon中写完代码后导出,选择导出语言为C#
2.新建一个C#Windows窗体应用项目,并配置,配置的过程如下:
2.1添加引用
添加引用的方法是:在Visual Studio 中点击菜单“项目->添加引用”,在弹出的对话框中选择“.NET”选项卡,在其中找到需要添加的命名空间,选择并确定。
删除引用的方法是:在Visual Studio 中点击菜单“视图->解决方案资源管理器”,在其中展开“引用”文件夹,在欲删除的引用上右击鼠标,点击“移除”即可。
2.2.添加命名空间
添加:using HalconDotNet;相当于C++中的include
一个简单的例子
halcon代码:
read_image (Timg, 'D:/研二/八月任务/图片/timg.jpg')
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
rgb1_to_gray (Timg, GrayImage)
threshold (GrayImage, Regions, 24, 100)
dev_display (Regions)
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;
using HalconDotNet;
namespace ShowPicture9._2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//定义变量
HObject ho_Timg, ho_GrayImage, ho_Regions;
HTuple hv_WindowHandle = new HTuple();
#region 处理显示图片
private void button2_Click(object sender, EventArgs e)
{
//打开窗口
//需要注意两个容易出错的地方:openWindow和dev_set_part
//第五个参数不能写0(导出来的时候是0)打开的大小和控件不一致需解决(前四个参数)
//HOperatorSet.OpenWindow(0, 0, 512, 512, 0, "visible", "", out hv_WindowHandle);
//hWindowControl1.Width, hWindowControl1.Height, hWindowControl1.HalconWindow控件宽、高和句柄
HOperatorSet.OpenWindow(0, 0, hWindowControl1.Width, hWindowControl1.Height, hWindowControl1.HalconWindow, "visible", "", out hv_WindowHandle);
HDevWindowStack.Push(hv_WindowHandle);
//转灰度
ho_GrayImage.Dispose();
HOperatorSet.Rgb1ToGray(ho_Timg, out ho_GrayImage);
//灰度直方图处理选择感兴趣区域
ho_Regions.Dispose();
HOperatorSet.Threshold(ho_GrayImage, out ho_Regions, 24, 100);
//如果窗口打开,则显示
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Regions, HDevWindowStack.GetActive());
}
}
#endregion
#region 从文件夹中采集图片
private void button1_Click(object sender, EventArgs e)
{
string ImagePath;
//OpenFileDialog openFileDialog1=new OpenFileDialog();
//设置打开文件的格式
openFileDialog1.Filter = "JPEG文件|*.jpg*|BMP文件|*.bmp*";
//打开路径回复至之前
openFileDialog1.RestoreDirectory = true;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Timg);
HOperatorSet.GenEmptyObj(out ho_GrayImage);
HOperatorSet.GenEmptyObj(out ho_Regions);
//清空图像
ho_Timg.Dispose();
//采集图片中文件的选择
//弹出【文件打开】对话框,如果用户操作时点击【OK】的话,就执行此条件分支内的代码
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//读取选中的图片
ImagePath = openFileDialog1.FileName;
HOperatorSet.ReadImage(out ho_Timg, ImagePath);
}
}
#endregion
}
}
界面:
添加的控件有四个,一个halcon窗口,两个button控件,一个对话框控件openFileDialog
(添加Halcon的控件如halcon窗口控件需要按照下面最图片操作)
注意:添加控件时,要导入halcondotnet.dll
3.从别的地方看到的一些知识:
From: 公众号 工控Zero
3.1.Halcon二次开发的两种方式
① 使用C#的语法方式逐句改写Halcon代码
优点:各种变量的类型清楚,可读性强,改写后代码行数几乎不会增加多少。
缺点:改写工作量大,容易出错,如果Halcon代码量大,后期将难以更新维护。
② 封装成函数导出 (推荐)
优点:操作简单,对开发人员编程能力要求低,工作量少,且便于维护。
缺点:Halcon函数导出的代码可读性极低,一旦丢失原Halcon文件,二次开发程序将难以更新维护。
建议:主二副一。
3.2.如果安装Halcon时不是安装在默认路径,可能需要将halcon.dll文件复制到当前项目的输出路径下,halcon.dll的路径为:C:\Program Files\MVTec\HALCON-12.0\bin\x64-win64\halcon.dll
3.3.C#中Halcon部分代码的调试不太方便,但也不是毫无办法。
① 调试时HTuple类型的变量可以直接查看值。
② Image、Region、Xld的变量一般只能通过“保存文件到本地”来查看变量情况。
HOperatorSet.WriteImage(image, "jpg", 0x000000, "1.jpg");//彩色图像
HOperatorSet.WriteImage(image, "jpg", 0, "1.jpg");//灰度图像
HOperatorSet.WriteRegion(ho_RegionUnion, "1.hobj");//后缀用.reg也行
HOperatorSet.WriteContourXldDxf(contours,"1.dxf");
③ 安装Halcon的变量检查插件到Visual Studio。该安装文件所在的默认路径为:
C:\Program Files\MVTec\HALCON-12.0\misc\HALCON_Variable_Inspect.vsix