.net6 wpf 联合 halcon 编程
1、halcon导出函数
*读取图片 read_image (Image, 'C:/Users/admin/Desktop/halcondemo1/claudia.png') get_image_size (Image, Width, Height) dev_close_window () dev_open_window (0, 0, Width, Height, 'black', WindowHandle) dev_display (Image) *灰度 rgb1_to_gray (Image, GrayImage) dev_display (GrayImage) *边缘 edges_image (Image, ImaAmp, ImaDir, 'canny', 1, 'nms', 10, 20) threshold (ImaAmp, Edges, 1 , 255) dev_display (Edges)

halconl导出代码
//
// File generated by HDevelop for HALCON/.NET (C#) Version 17.12
//
using HalconDotNet;
public partial class HDevelopExport
{
#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)
public HDevelopExport()
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("width", 512);
HOperatorSet.SetSystem("height", 512);
if (HalconAPI.isWindows)
HOperatorSet.SetSystem("use_window_thread","true");
action();
}
#endif
#if !NO_EXPORT_MAIN
// Main procedure
private void action()
{
// Local iconic variables
HObject ho_Image, ho_GrayImage, ho_ImaAmp;
HObject ho_ImaDir, ho_Edges;
// Local control variables
HTuple hv_Width = null, hv_Height = null, hv_WindowHandle = null;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.GenEmptyObj(out ho_GrayImage);
HOperatorSet.GenEmptyObj(out ho_ImaAmp);
HOperatorSet.GenEmptyObj(out ho_ImaDir);
HOperatorSet.GenEmptyObj(out ho_Edges);
//读取图片
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, "C:/Users/admin/Desktop/halcondemo1/claudia.png");
HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.CloseWindow(HDevWindowStack.Pop());
}
HOperatorSet.SetWindowAttr("background_color","black");
HOperatorSet.OpenWindow(0,0,hv_Width,hv_Height,0,"visible","",out hv_WindowHandle);
HDevWindowStack.Push(hv_WindowHandle);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
}
//灰度
ho_GrayImage.Dispose();
HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_GrayImage, HDevWindowStack.GetActive());
}
//边缘
ho_ImaAmp.Dispose();ho_ImaDir.Dispose();
HOperatorSet.EdgesImage(ho_Image, out ho_ImaAmp, out ho_ImaDir, "canny", 1, "nms",
10, 20);
ho_Edges.Dispose();
HOperatorSet.Threshold(ho_ImaAmp, out ho_Edges, 1, 255);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Edges, HDevWindowStack.GetActive());
}
ho_Image.Dispose();
ho_GrayImage.Dispose();
ho_ImaAmp.Dispose();
ho_ImaDir.Dispose();
ho_Edges.Dispose();
}
#endif
}
#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)
public class HDevelopExportApp
{
static void Main(string[] args)
{
new HDevelopExport();
}
}
#endif
halcon显示

2、使用导出的C#代码

4、修改导出的 cs程序
核心:把导出来的打开新窗口函数 删除!!!
//
// File generated by HDevelop for HALCON/.NET (C#) Version 17.12
//
using HalconDotNet;
using System;
public partial class HDevelopExport
{
#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)
public HDevelopExport(IntPtr intPtr)
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("width", 512);
HOperatorSet.SetSystem("height", 512);
if (HalconAPI.isWindows)
HOperatorSet.SetSystem("use_window_thread", "true");
//设置窗体
if (HDevWindowStack.IsOpen())
{
HOperatorSet.CloseWindow(HDevWindowStack.Pop());
}
HOperatorSet.SetWindowAttr("background_color", "black");
this.hv_WindowHandle = intPtr;
HDevWindowStack.Push(hv_WindowHandle);
}
// Local iconic variables
private HObject ho_Image = null;
private HObject ho_GrayImage = null;
private HObject ho_ImaAmp = null;
private HObject ho_ImaDir = null;
private HObject ho_Edges = null;
// Local control variables
private HTuple hv_Width = null;
private HTuple hv_Height = null;
private HTuple hv_WindowHandle = null;
#endif
// Main procedure
public void action()
{
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
//读取图片
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, "C:/Users/admin/Desktop/halcondemo1/claudia.png");
HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
//显示图片
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetPart(HDevWindowStack.GetActive(), 0, 0, hv_Width - 1, hv_Height - 1);
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
}
}
/// <summary>
/// 灰度
/// </summary>
public void ActionGray()
{
HOperatorSet.GenEmptyObj(out ho_GrayImage);
ho_GrayImage.Dispose();
HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_GrayImage, HDevWindowStack.GetActive());
}
ho_GrayImage.Dispose();
}
/// <summary>
/// 边缘
/// </summary>
public void ActionEdge()
{
HOperatorSet.GenEmptyObj(out ho_ImaAmp);
HOperatorSet.GenEmptyObj(out ho_ImaDir);
HOperatorSet.GenEmptyObj(out ho_Edges);
//边缘
ho_ImaAmp.Dispose(); ho_ImaDir.Dispose();
HOperatorSet.EdgesImage(ho_Image, out ho_ImaAmp, out ho_ImaDir, "canny", 1, "nms",
10, 20);
ho_Edges.Dispose();
HOperatorSet.Threshold(ho_ImaAmp, out ho_Edges, 1, 255);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Edges, HDevWindowStack.GetActive());
}
}
}
5、使用
MainWindow.xaml
<Window x:Class="WpfApp3HalconTestDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp3HalconTestDemo"
xmlns:hs="clr-namespace:HalconDotNet;assembly=halcondotnet"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition ></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<Button Content="读取图片" Margin="3" MinWidth="130" Click="ReadImage_Click"></Button>
<Button Content="灰度" Margin="3" MinWidth="130" Click="GrayImage_Click"></Button>
<Button Content="边缘检测" Margin="3" MinWidth="130" Click="EdgeImage_Click"></Button>
</StackPanel>
<hs:HSmartWindowControlWPF x:Name="hs" Grid.Row="1" Loaded="hs_Loaded">
</hs:HSmartWindowControlWPF>
</Grid>
</Window>
MainWindow.xaml.cs
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp3HalconTestDemo
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private HDevelopExport hDevelopExport;
public MainWindow()
{
InitializeComponent();
}
private void hs_Loaded(object sender, RoutedEventArgs e)
{
hDevelopExport = new HDevelopExport(this.hs.HalconID);
}
private void ReadImage_Click(object sender, RoutedEventArgs e)
{
hDevelopExport.action();
}
private void GrayImage_Click(object sender, RoutedEventArgs e)
{
hDevelopExport.ActionGray();
}
private void EdgeImage_Click(object sender, RoutedEventArgs e)
{
hDevelopExport.ActionEdge();
}
}
}
显示


浙公网安备 33010602011771号