一、如何在C#中创建window窗口及利用haclon编程
1.首先在已安装的Visual studio 2022中创建需要联合的windows窗体项目
这里是利用的C#语言进行编程,在选项框中寻找到Windows窗体应用(.NET framework)并创建
2.在halcon软件的根目录中寻找dll文件,在x64文件夹中选择halcon.dll文件,然后在上级目录中寻找dotnet35文件夹,并选择其中所有dll文件。一并复制。
3.进入创建的联合项目,将选择的dll文件复制在\bin\Debug目录下
4.复制完成后,选择引用,添加引用,浏览并选择halcondotnet.dll文件,如果未找到,在下方浏览中寻找之前保存的路径。右侧引用出现halcondotnet表示引用成功
5.添加 halcon 图像显示控件。引用完成后,将此前文件夹中的halcondotnet.dll再次复制拖入至工具箱(ctrl+alt+x)并选择HWindowControl,即可得到haclon自带的窗口。
6.注:项目中系统默认的为32位生成,请将选项关闭再进行调试。
否则会显示格式报错。
二、halcon在C#中的基础应用
1.利用工具箱添加halcon窗口及按键,下拉框,文本框,双击按键创建点击事件
2。首先创建一个基础对象ho_image
HObject ho_image;
3.在构造函数中创建三个下拉框变量
public Form1()
{
InitializeComponent();
comboBox1.Items.Add("area");
comboBox1.Items.Add("circularity");
comboBox1.Items.Add("rectangularity");
}
4.双击按键1进入点击事件
在事件中利用OpenFileD OpenFileDialog dlg = new OpenFileDialog();实例化。实例化此类可以设置弹出一个文件对话框,其中FileName属性可以返回选中文件的路径。适用选中一个文件,如果是多个文件就用 FileNames,用数组接收。
这里是打开一个文件选择对话框,让用户选择一个图像文件。如果用户选择了一个文件并点击了对话框的确认按钮,代码将会读取选中的图像文件并存储在ho_image变量中。
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
HOperatorSet.ReadImage(out ho_image, dlg.FileName);
}
5.进行图像的基础halcon代码处理并通过
HOperatorSet.DispObj(SelectionRegion, hWindowControl1.HalconWindow);
将运算后的变量打印在窗口上。
//设置图片的宽高属性并获取
HTuple width, height;
HOperatorSet.GetImageSize(ho_image, out width, out height);
//hWindowControl_readimage.HalconWindow--获得窗体句柄
HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, height - 1, width - 1);
//进行图片阈值分割,在0-50的灰度值中
HObject Region;
HOperatorSet.Threshold(ho_image, out Region, 0, 50);
//进行边缘检测,并输出子像素精确的边缘位置
HObject ho_edges;
HOperatorSet.EdgesSubPix(ho_image, out ho_edges, "canny", 1, 20, 40);
//将图片进行打散处理
HObject ConnectionRegion;
HOperatorSet.Connection(Region, out ConnectionRegion);
//筛选面积为1000-3000的子项
HObject SelectionRegion;
HOperatorSet.SelectShape(ConnectionRegion, out SelectionRegion, comboBox1.SelectedItem.ToString(), "and", double.Parse(textBox1.Text), double.Parse(textBox2.Text));
//输出并显示最终结果在创建的hWindowControl1窗口上
HOperatorSet.DispObj(SelectionRegion, hWindowControl1.HalconWindow);
HOperatorSet.DispObj(ho_edges, hWindowControl1.HalconWindow);
三、效果
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;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace halcon_联合编程
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
comboBox1.Items.Add("area");
comboBox1.Items.Add("circularity");
comboBox1.Items.Add("rectangularity");
}
HObject ho_image;
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
HOperatorSet.ReadImage(out ho_image, dlg.FileName);
}
//设置图片的宽高属性并获取
HTuple width, height;
HOperatorSet.GetImageSize(ho_image, out width, out height);
//hWindowControl_readimage.HalconWindow--获得窗体句柄
HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, height - 1, width - 1);
//进行图片阈值分割,在0-50的灰度值中
HObject Region;
HOperatorSet.Threshold(ho_image, out Region, 0, 50);
//进行边缘检测,并输出子像素精确的边缘位置
HObject ho_edges;
HOperatorSet.EdgesSubPix(ho_image, out ho_edges, "canny", 1, 20, 40);
//将图片进行打散处理
HObject ConnectionRegion;
HOperatorSet.Connection(Region, out ConnectionRegion);
//筛选面积为1000-3000的子项
HObject SelectionRegion;
HOperatorSet.SelectShape(ConnectionRegion, out SelectionRegion, comboBox1.SelectedItem.ToString(), "and", double.Parse(textBox1.Text), double.Parse(textBox2.Text));
//输出并显示最终结果在创建的hWindowControl1窗口上
HOperatorSet.DispObj(SelectionRegion, hWindowControl1.HalconWindow);
HOperatorSet.DispObj(ho_edges, hWindowControl1.HalconWindow);
}
}
}