1. 应用背景

在工业项目中,往往需要使用机器视觉结合人机界面开发特定的,面向工艺的项目。机器视觉中,Halcon无疑是功能强大的,能快速应用到项目的视觉产品,而WPF则是解决人机界面的利器。因此了解如何将HDevelop开发的视觉应用导入到VS开发的WPF项目中是很有实际意义的事情。HDevelop不断提供了功能强大的视觉算法,编程工具,同时也提供了将程序封装,导出到包括.net Framework在内的各种平台的功能。基于此,本文将这一过程记录下来,以备日后查用。

2. 开发工具和平台

界面:VS2017 + Net Framework4.8 + WPF

视觉:HDevelop Version 13.0(27.10.2016) + HALCON 13.0.1.1( 14.06.2017 )

Windows:Windows10 企业版 + Intel i5-7300HQ 2.5GHz + RAM 8GB + x64

3. 步骤和结果

  • HDevelop代码

    •   新建名称为test的函数

    • 设置test函数参数如下图所示:

    • 编辑test函数代码,识别下图所示别针并输出每个别针的方向角度
 1 read_image (Clip, 'C:/Users/Public/Documents/MVTec/HALCON-13.0/examples/images/clip.png')
2 threshold (Clip, Region, 10, 56)
3 connection (Region, ConnectedRegions)
4 select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 4100, 5964)
5 orientation_region (SelectedRegions, Phi)
6 area_center (SelectedRegions, Area, Row, Column)
7 for Index := 0 to |Phi|-1 by 1
8 set_tposition(hw,Row[Index],Column[Index])
9 write_string(hw,deg(Phi[Index])+' degrees')
10 endfor
11 dev_display(SelectedRegions)
12 return ()
    • 编辑Main函数,调用test函数,运行之后得到下图所示输出

1 test (SelectedRegions, 200000)

    •  导出程

  • C#代码
    •  VS工具箱,右键添加相应工具

    • 新建WPF项目代码如下
 1 <Window
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:local="clr-namespace:Demo"
7 xmlns:HalconDotNet="clr-namespace:HalconDotNet;assembly=halcondotnet" x:Class="Demo.MainWindow"
8 mc:Ignorable="d"
9 Title="MainWindow" Height="450" Width="800"
10 AllowsTransparency="False"
11 >
12 <Grid>
13 <StackPanel>
14 <HalconDotNet:HSmartWindowControlWPF x:Name="HalconDemo" Height="300" Foreground="#FFFF0202" />
15 <Button x:Name="LoadPic" Width="100" Height="50" Content="Load" Click="LoadPic_Click"/>
16 </StackPanel>
17 </Grid>
18 </Window>

添加Halcon引用,安装目录\bin\dotnet35\halcondotnet.dll。如下:

后台代码如下:

 1 using HalconDotNet;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6 //using System.Threading.Tasks;
7 using System.Windows;
8 using System.Windows.Controls;
9 using System.Windows.Data;
10 using System.Windows.Documents;
11 using System.Windows.Input;
12 using System.Windows.Media;
13 using System.Windows.Media.Imaging;
14 using System.Windows.Navigation;
15 using System.Windows.Shapes;
16
17 namespace Demo
18 {
19 /// <summary>
20 /// MainWindow.xaml 的交互逻辑
21 /// </summary>
22 public partial class MainWindow : Window
23 {
24 /*
25 private HWindow Window;
26 private HFramegrabber Framegrabber;
27 private HImage Img;
28
29 private HTuple ImgType, ImgWidth, ImgHeight;
30 */
31
32
33
34 public MainWindow()
35 {
36 InitializeComponent();
37
38 InitializeUserComponent();
39 }
40
41 private void InitializeUserComponent()
42 {
43
44 }
45
46 private void LoadPic_Click(object sender, RoutedEventArgs e)
47 {
48 HObject hObject;
49 HDevelopExport hDevelopExport = new HDevelopExport();
50 hDevelopExport.test(out hObject,HalconDemo.HalconWindow);
51
52 HImage hImage = new HImage("C:/Users/Public/Documents/MVTec/HALCON-13.0/examples/images/clip.png");
53 HalconDemo.SetFullImagePart(hImage);
54 HalconDemo.HalconWindow.DispObj(hObject);
55
56
57
58 }
59 }
60
61
62 }
    • 导入之前从HDevelop导出的C#代码
    • F5运行结果如下图

4. 小结

整个过程要点记录如下:

  • Halcon安装目录下\Program Files\MVTec\HALCON-13,0\bin\dotnet35 这个版本支持.net Framework3.5及以上版本的WPF项目;
  • 从HDevelop导出并导入到Visual Studio的代码中,action()里的内容为Halcon中Main程序的测试代码,视实际情况可能需要注释掉;
  • HDevelop中测试时所使用的窗口句柄在WPF环境中可能需要通过参数传递进去,相关的代码需要修改;
  • WPF环境中调用封装的Halcon函数时,需要输出HObject对象,然后通过DispObj方法显示对应的对象,否则可能导致图像不能显示;
  • 调用SetFullImagePart方法可使得图片自适应控件窗口;

Halcon代码导出到.net FrameWork/WPF的更多相关文章

  1. Halcon小函数的封装和代码导出

    一.Halcon小函数的封装和修改 1.名词解释: 算子:指Halcon中最基础.最底层的函数(即你看不到它的代码实现),一个算子只有一句话,例如threshold算子. 小函数:由多个算子组合成的函 ...

  2. Ay.Framework.WPF 2.0建立项目到底有多快

    2015-3-31 今天我已经优化了很多地方,让客户使用起来几乎是傻瓜式使用了,废话不多说,我们开始吧. 默认的我提供了一些图片,但是也只占用了8M多,2.0版本目前总共有45M左右大小,毕竟包含了f ...

  3. java代码导出数据到Excel、js导出数据到Excel(三)

     jsp内容忽略,仅写个出发按钮:          <button style="width: 100px" onclick="expertExcel()&quo ...

  4. .NetCore技术研究-一套代码同时支持.NET Framework和.NET Core

    在.NET Core的迁移过程中,我们将原有的.NET Framework代码迁移到.NET Core.如果线上只有一个小型的应用还好,迁移升级完成后,只需要维护.NET Core这个版本的代码. 但 ...

  5. 代码同时支持.NET Framework和.NET Core

    代码同时支持.NET Framework和.NET Core .NetCore技术研究-一套代码同时支持.NET Framework和.NET Core   在.NET Core的迁移过程中,我们将原 ...

  6. 一套代码同时支持.NET Framework和.NET Core

    转自:https://www.cnblogs.com/tianqing/p/11614303.html 在.NET Core的迁移过程中,我们将原有的.NET Framework代码迁移到.NET C ...

  7. ExcelToObject.NPOI 两行代码导出Excel报表、读取Excel数据

    简介 作为一个dotnet开发者,经常面对业务系统中大量报表导入导出,经常写了一堆的重复代码.最近发现一个操作excel的神器:ExcelToObject.NPOI,两行代码就能导出一个报表,两行代码 ...

  8. 演练:我的第一个 WPF 桌面应用程序 https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/getting-started/walkthrough-my-first-wpf-desktop-application

    这篇文章演示如何开发简单的 Windows Presentation Foundation (WPF) 应用程序包括元素所共有的大多数 WPF 应用程序: 可扩展应用程序标记语言 (XAML) 标记. ...

  9. WIN10 64位下VS2015 C#直接添加 halcon 12导出的CS文件实现视觉检测

    C# halcon 12 联合编程的 实例 1.先调试好halcon程序,我以读取图片的程序为例.

  10. Halcon程序导出运行的方法

    1 在Halcon中打开程序,如clip.hdev: 2 文件->导出 设置使用导出模板,使用UTF-8编码: 3 导出cs文件 4 新建Winform程序 5 在工具栏中点右键->选择项 ...

随机推荐

  1. Tensorflow框架实现中的“三”种图

    https://zhuanlan.zhihu.com/p/31308381 图(graph)是 tensorflow 用于表达计算任务的一个核心概念.从前端(python)描述神经网络的结构,到后端在 ...

  2. 性能测试记录: ZZ 只改5行代码获得10倍吞吐量提升

    首先得找台足够性能的机器来测试,性能不足时代码运行会出现各种奇怪的现象,导致浪费时间 文章: https://www.jianshu.com/p/4cd8596352ad   只改了5行代码吞吐量提升 ...

  3. oracle 高级队列

    转载:http://www.idevelopment.info/data/Oracle/DBA_tips/Advanced_Queuing/AQ_2.shtml Overview This artic ...

  4. Java项目引入第三方Jar包

    普通java Project 引入jar包: 1,copy jar to lib folder. 2, imported with Build path -> Add external jars ...

  5. oracle中将同一组的数据拼接(转)

    需要用wm_concat函数来实现. 如目前在emp表中查询数据如下: 要按照deptno相同的将ename以字符串形式合并,可用如下语句: 1 select deptno,wm_concat(ena ...

  6. Codeforces Round #694 (Div. 1) - B. Strange Definition

    数论 Problem - B - Codeforces 题意 给定 \(n\;(1<=n<=3*10^5)\) 个数 \(a[i]\), \(1<=a[i]<=10^6\) 把 ...

  7. 尝试在Ubuntu中安装Emacs遇到的问题

    出现具体问题 今日学习安装emacs在Ubuntu19.04当中 安装详见下方帖子: 链接: 如何在Ubuntu中安装Emacs. 安装遇到问题,即 sudo add-apt-repository p ...

  8. Excel——解除工作表保护

    策略:删除密码保护,而非破解密码 例 该工作簿有工作表保护,因忘记密码,无法更改内容. 解决方案 1.用压缩软件打开表格. 2.向下进入目录:xl/worksheets,选择sheet1.xml,用记 ...

  9. Linux 查看enable自启动服务

    pi@pi4:~/client $ systemctl list-unit-files |grep enable autovt@.service enabled avahi-daemon.servic ...

  10. 请求接口类型blob,下载文件

    axiosGet () { var This = this var url = '/group1/M00/00/21/MejEvGOX_zOAL2kiAAAAUhB5Iqg138.txt?token= ...