ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Halcon代码导出到.net FrameWork/WPF

2022-01-29 15:00:19  阅读:204  来源: 互联网

标签:Windows System private Halcon FrameWork HDevelop using 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方法可使得图片自适应控件窗口;

标签:Windows,System,private,Halcon,FrameWork,HDevelop,using,WPF
来源: https://www.cnblogs.com/cherorivers/p/chero-rivers.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有