Halcon代码导出到.net FrameWork/WPF
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的更多相关文章
- Halcon小函数的封装和代码导出
一.Halcon小函数的封装和修改 1.名词解释: 算子:指Halcon中最基础.最底层的函数(即你看不到它的代码实现),一个算子只有一句话,例如threshold算子. 小函数:由多个算子组合成的函 ...
- Ay.Framework.WPF 2.0建立项目到底有多快
2015-3-31 今天我已经优化了很多地方,让客户使用起来几乎是傻瓜式使用了,废话不多说,我们开始吧. 默认的我提供了一些图片,但是也只占用了8M多,2.0版本目前总共有45M左右大小,毕竟包含了f ...
- java代码导出数据到Excel、js导出数据到Excel(三)
jsp内容忽略,仅写个出发按钮: <button style="width: 100px" onclick="expertExcel()&quo ...
- .NetCore技术研究-一套代码同时支持.NET Framework和.NET Core
在.NET Core的迁移过程中,我们将原有的.NET Framework代码迁移到.NET Core.如果线上只有一个小型的应用还好,迁移升级完成后,只需要维护.NET Core这个版本的代码. 但 ...
- 代码同时支持.NET Framework和.NET Core
代码同时支持.NET Framework和.NET Core .NetCore技术研究-一套代码同时支持.NET Framework和.NET Core 在.NET Core的迁移过程中,我们将原 ...
- 一套代码同时支持.NET Framework和.NET Core
转自:https://www.cnblogs.com/tianqing/p/11614303.html 在.NET Core的迁移过程中,我们将原有的.NET Framework代码迁移到.NET C ...
- ExcelToObject.NPOI 两行代码导出Excel报表、读取Excel数据
简介 作为一个dotnet开发者,经常面对业务系统中大量报表导入导出,经常写了一堆的重复代码.最近发现一个操作excel的神器:ExcelToObject.NPOI,两行代码就能导出一个报表,两行代码 ...
- 演练:我的第一个 WPF 桌面应用程序 https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/getting-started/walkthrough-my-first-wpf-desktop-application
这篇文章演示如何开发简单的 Windows Presentation Foundation (WPF) 应用程序包括元素所共有的大多数 WPF 应用程序: 可扩展应用程序标记语言 (XAML) 标记. ...
- WIN10 64位下VS2015 C#直接添加 halcon 12导出的CS文件实现视觉检测
C# halcon 12 联合编程的 实例 1.先调试好halcon程序,我以读取图片的程序为例.
- Halcon程序导出运行的方法
1 在Halcon中打开程序,如clip.hdev: 2 文件->导出 设置使用导出模板,使用UTF-8编码: 3 导出cs文件 4 新建Winform程序 5 在工具栏中点右键->选择项 ...
随机推荐
- 1071 - Specified key was too long; max key length is 767 bytes
set global innodb_large_prefix=on;set global innodb_file_format=BARRACUDA; 主从都要修改以上2个参数.
- VS不能生成moc_XXX文件的问题解决
环境:VS2010 + QT 4.8 问题:写好QT代码文件(XXX.h和XXX.cpp)后,发现不能像其它QT文件那样自动生成moc_XXX文件. 解决: 1.参考网文,将XXX.h文件的属性配置成 ...
- centos7 python设置虚拟环境
virtualenv 是一个可以在同一计算机中隔离多个python版本的工具.有时,两个不同的项目可能需要不同版本的python,如 python2.6.6 / python3.0 ,但是如果都装到一 ...
- apk反编译工具--dex2jar
dex2jar 2.1 https://github.com/pxb1988/dex2jar/releases 链接: https://pan.baidu.com/s/1ZU16mPE_QNhzWxF ...
- C++书写的第一个类
1.建立Student.h头文件 #ifndef STUDENT_H #define STUDENT_H #include <string> using namespace std; cl ...
- PaddleOcr-noavx离线部署文档
PaddleOcr-noavx离线部署文档 环境与版本说明: 系统 架构 Anaconda3 PaddlePaddle PaccleOCR 银河麒麟Server V10 X86 Anaconda3-2 ...
- Map 使用
1.替换map中的某个key Map<String,Object> map = new HashMap<>(); map.put("新key",map.re ...
- 使用jquery+layui 做一个输入搜索下拉 类似lay-search
效 果: 因为需要做一个搜索出现下拉然后点击 自动填装input 内容的 东西. 一开始使用lay-search 的控件去弄. 但是无法控制里面的内容.所以用了一些笨方法去弄 废话不说了, html ...
- 记一次p标签内容不换行记录
p标签内容l里面如果全部是英文,那么默认是不会换行的. 需要添加word-wrap: break-word; 属性 这样就会自动换行了
- 学PHP的第二天!
这是我学PHP的第二天,我改了一些代码,终于把我喜欢的OJ网站的默认模板给改掉了,竟然能用!!!我从来都没有这么的欣喜过,看来PHP果真是一门非常好用的编程语言,但这个OJ有些用的是python的模块 ...