今天主要记录一下C#调用halcon.dll的过程,以及如何在Visual Studio中如何调用。
1.找到相应路径下的文件
上方是本次需要寻找的文件,这里我在Visual Studio文件夹下新建了个halcon文件夹方便存储这九个文件。
鼠标右击桌面上的halcon并打开文件所在位置,这个位置在安装halcon的时候是自己选择的,我这里是选择的E盘。
打开文件位置后可以在这一页目录中找到这样一个halcon.dll文件,将它复制贴贴到自己创建的文件夹下。
这里来到文件所在位置后返回上一级,也就是bin文件夹。
然后进入bin文件夹中的dotnet35文件夹中,选择上方框住的8个文件并复制到自己创建的文件夹下(这里我用鼠标左键拖动框的)。这样找文件这一步骤就完毕了。
2.在C#调用文件
打开Visual Studio并创建一个窗体项目
在应用窗口正中偏上的地方有三个下拉框可以选择你要创建的项目模板,这里选择创建一个窗口模板,选择如上图所示。
后续选择上图项目然后右下角点击下一步。
为了方便管理项目,我在Visual Studio下创建了一个project文件夹用于放置我所使用的项目,然后使用日期进行分类,日期文件夹下方是我的项目名字。更改好后点击右下方的创建。
第一次见窗体项目(迎面走来的你让我如此蠢蠢欲动( ̄。。 ̄))
我当然不是第一次打开,所以没有工具箱或者解决方案资源管理器的可以在最顶上的视图中找到。
将第一步创建的文件夹中准备好的文件全选复制。
将上方复制的九个文件复制到项目名字下的bin文件下的Debug中,这里面便是项目运行的地方。
在项目窗口的界面点击运行,或者按电脑键盘上的F5(有的电脑是Fn+F5),可以看到运行后有个窗口,以及Debug路径下出现的三个新文件。项目名.exe就是你看到的那个Form1窗口。
然后在解决方案资源管理器下的自己项目中找到引用,右击引用并添加引用。
接下来就是点击浏览去找文件啦。
将刚刚的路径找到,或者在电脑中直接复制刚刚的路径,选择halcondotnet.dll文件然后添加,这里面有实现算法的必要资源。
看到添加后的.dll文件,引用中明显多了halcondotent。
然后小窗打开项目Debug的文件夹,就是刚刚复制贴贴那九个文件的位置,单击halcondotent.dll文件拖到工具箱随便一个位置(这里我之前没注意拖到中间位置,可以拖在上面方便找)。这样调用文件部分就完啦。
3.编写代码联合测试
将HWindowControl拖到Form1的窗口上形成黑色的窗口,然后根据上图分别放置按钮,文本框(TextBox),标签(Label),下拉框(ComboBox)。
右键我的项目名字,选中最下面的属性,点击上图的生成,在把首选32位勾选成空,否则会报错。
在经过一系列粗略的代码调试下可以得出一些测试结果,这里并没有进行精细地调整代码。
以下是部分代码:
public Form1()
{
InitializeComponent();
// comboBoxs--->一个个加了三个选项
comboBox1.Items.Add("area");
comboBox1.Items.Add("circularity");
comboBox1.Items.Add("rectangularity");
//选择首个选项
comboBox1.SelectedIndex = 0;
}
HObject ho_image;
private void ReadImage_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
HOperatorSet.ReadImage(out ho_image, openFileDialog.FileName);
}
}
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
HOperatorSet.ReadImage(out ho_image, openFileDialog.FileName);
}
HTuple width, height;
//获得图片的宽高
HOperatorSet.GetImageSize(ho_image, out width, out height);
//设置显示范围
//HWindowControl.HalconWindow -->控件的句柄 设置显示范围
HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, (height - 1), (width - 1));
//显示
HOperatorSet.DispObj(ho_image, hWindowControl1.HalconWindow);
}
private void button1_Click(object sender, EventArgs e)
{
HOperatorSet.SetColor(hWindowControl2.HalconWindow, "green");
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
HOperatorSet.ReadImage(out ho_image, openFileDialog.FileName);
}
HTuple width, height;
//获得图片的宽高
HOperatorSet.GetImageSize(ho_image, out width, out height);
//设置显示范围
//HWindowControl.HalconWindow -->控件的句柄 设置显示范围
HOperatorSet.SetPart(hWindowControl2.HalconWindow, 0, 0, (height - 1), (width - 1));
//阈值分割
HObject Region;
HOperatorSet.Threshold(ho_image, out Region, 0, 50);
//显示
HOperatorSet.DispObj(Region, hWindowControl2.HalconWindow);
}
private void button2_Click_1(object sender, EventArgs e)
{
HOperatorSet.SetColor(hWindowControl3.HalconWindow, "green");
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
HOperatorSet.ReadImage(out ho_image, openFileDialog.FileName);
}
HTuple width, height;
//获得图片的宽高
HOperatorSet.GetImageSize(ho_image, out width, out height);
//设置显示范围
//HWindowControl.HalconWindow -->控件的句柄 设置显示范围
HOperatorSet.SetPart(hWindowControl3.HalconWindow, 0, 0, (height - 1), (width - 1));
//阈值分割
HObject Region;
HOperatorSet.Threshold(ho_image, out Region, 0, 50);
//打散
HObject ConnectionRegion;
HOperatorSet.Connection(Region, out ConnectionRegion);
//特征筛选
HObject SelectRegion;
//HOperatorSet.SelectShape(ConnectionRegion,out SelectRegion, "area","and", 3227.85, 7897.33);
HOperatorSet.SelectShape(ConnectionRegion, out SelectRegion, comboBox1.SelectedItem.ToString(), "and", Double.Parse(SP_Min.Text), Double.Parse(SP_Max.Text));
//显示原图并将特征筛选后的结果展示在原图上
HOperatorSet.DispObj(ho_image, hWindowControl3.HalconWindow);
HOperatorSet.DispObj(SelectRegion, hWindowControl3.HalconWindow);
}
以上就是本次日志的全部内容,有多处不完整和需要修补的地方,并且在逻辑上只是单纯地重复代码,以后再做修改,本次日志仅供参考。