Halcon-模板匹配(WPF)

halcon的代码

复制代码
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'C:/Users/CF/Desktop/image.jpg')
dev_display (Image)

draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image, Rectangle, ImageReduced)
crop_domain (ImageReduced, ImagePart)


create_shape_model (ImagePart, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)

write_shape_model (ModelID, 'C:/Users/CF/Desktop/shapeModel1.shm')

find_shape_model (ImagePart, ModelID, -0.39, 0.79, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
halcon结果

WPF代码:

xaml:
html 复制代码
<Window x:Class="HalconWPF.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:halcon="clr-namespace:HalconDotNet;assembly=halcondotnet"
        xmlns:local="clr-namespace:HalconWPF"
        mc:Ignorable="d"
        WindowStartupLocation="CenterScreen"
        Title="WPF/Halcon_TemplateMatchingExample" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition/>
            <RowDefinition Height="40"/>
            
        </Grid.RowDefinitions>

        <StackPanel Orientation="Horizontal">
            <Button Content="读取图片" Click="BtnReadImage_Click" Margin="5" Padding="5"/>
            <Button Content="定位结果" Click="BtnRun_Click" Margin="5" Padding="5"/>

        </StackPanel>

        <halcon:HSmartWindowControlWPF x:Name="HSmart" Grid.Row="1"/>

        <TextBlock  x:Name="txtResult" Background="LightBlue"  Grid.Row="2" Margin="5"/>


    </Grid>
</Window>
cs代码:
cs 复制代码
using HalconDotNet;
using System.Windows;


namespace HalconWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        // 创建HImage对象用于图像处理
        HImage hImage = new HImage();

        // 创建HTuple对象用于存储模型ID
        HTuple modelID = new HTuple();
        

        // 创建HTuple对象用于存储匹配结果的位置、角度和得分
        HTuple hv_Row = new HTuple(), hv_Column = new HTuple();
        HTuple hv_Angle = new HTuple(), hv_Score = new HTuple();

        // 读取图片
        private void BtnReadImage_Click(object sender, RoutedEventArgs e)
        {           
            // 读取图像文件
            hImage.ReadImage("C:/Users/CF/Desktop/Image.jpg");

            // 在Halcon的 HSmartWindowControlWPF 控件中显示图像
            HSmart.HalconWindow.DispObj(hImage);
           
        }
        
        // 模板匹配 
        private void BtnRun_Click(object sender, RoutedEventArgs e)
        {
            // 从指定路径读取形状模型文件
            HOperatorSet.ReadShapeModel("C:/Users/CF/Desktop/shapeModel1.shm", out modelID);

            // 执行模板匹配操作 
            HOperatorSet.FindShapeModel(
                hImage,          // 输入图像
                modelID,         // 形状模型ID
                -0.39, 0.79,     // 搜索角度范围
                0.5, 1,          // 搜索尺度范围
                0.5,             // 最小重叠比例
                "least_squares", // 匹配方法
                0,               // 优化参数
                0.9,             // 最低得分阈值
                out hv_Row,      // 输出匹配位置的行坐标
                out hv_Column,   // 输出匹配位置的列坐标
                out hv_Angle,    // 输出匹配位置的角度
                out hv_Score     // 输出匹配得分
            ); 

            // 将匹配结果显示在文本框中
            txtResult.Text = $"分数:{hv_Score.DArr[0]} , Row坐标: {hv_Row.DArr[0]} , Column坐标:{hv_Column.DArr[0]}";

            // 设置Halcon窗口的颜色为红色
            HOperatorSet.SetColor(HSmart.HalconWindow, "red");

            // 在Halcon窗口中绘制匹配位置的十字标记
            HOperatorSet.DispCross(HSmart.HalconWindow, hv_Row.DArr[0], hv_Column.DArr[0], 30, hv_Angle);
        }
    }
}
运行结果
相关推荐
一个天蝎座 白勺 程序猿15 小时前
IoTDB集群扩容:从慌乱到从容的经验分享
数据库·wpf·时序数据库·iotdb
samble1 天前
从零搭建灌装监控系统(十三):报警系统设计,生命周期与通知
c#·wpf·mvvm·modbus·工业控制
samble2 天前
从零搭建灌装监控系统(十二):配置系统,原子写入与容错
c#·wpf·mvvm·modbus·工业控制
蜗牛互联网5 天前
OLMo-core 3的token gerrymandering提醒:MoE路由要按时间窗验收
java·人工智能·wpf
LateFrames5 天前
WPF 升级选型:用 .NET 8 还是 .NET 10
.net·wpf·.net8·.net10
samble5 天前
从零搭建灌装监控系统(十):生产追溯,条码触发自动记录
c#·wpf·mvvm·modbus·工业控制
SamChan907 天前
PDF页面旋转与CropBox陷阱:译文回填位置总是错位的根因实测
python·ai·pdf·wpf
SamChan908 天前
PDF翻译时页眉页脚总在捣乱?跨页重复文本块的检测与过滤实测
人工智能·python·ai·pdf·wpf
samble16 天前
从零搭建灌装监控系统(四):深色主题与样式系统,ResourceDictionary 统一管理
c#·wpf·mvvm·样式·工业控制
_Jonas16 天前
.net framework开发环境正式环境配置文件的切换
.net·wpf