<Window x:Class="FirstSolver.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ha="http://schemas.mvtec.com/halcondotnet"
TextElement.Foreground="{DynamicResource MaterialDesignBody}"
TextElement.FontWeight="Regular"
TextElement.FontSize="16"
TextOptions.TextFormattingMode="Ideal"
TextOptions.TextRenderingMode="ClearType"
Background="{DynamicResource MaterialDesignPaper}"
FontFamily="Microsoft YaHei Light"
Name="RootWindow" Title="Halcon全局阈值分割" WindowState="Maximized" WindowStartupLocation="CenterScreen">
<materialDesign:DialogHost Identifier="RootDialog" DialogTheme="Inherit">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Style="{StaticResource MaterialDesignFilledTextBox}" materialDesign:HintAssist.Hint="图像文件" Name="TextBoxImagePath" IsReadOnly="True"/>
<StackPanel Grid.Column="1" Orientation="Horizontal">
<Button Margin="4" Style="{StaticResource MaterialDesignIconButton}" Name="ButtonSelectFile" Click="ButtonSelectFile_Click">
<Button.Content>
<materialDesign:PackIcon Kind="FolderOpenOutline"/>
</Button.Content>
</Button>
<TextBox Margin="4" Name="TextBoxMinGray" Style="{StaticResource MaterialDesignFloatingHintTextBox}" materialDesign:HintAssist.Hint="最小灰度值" Text="0"/>
<TextBox Margin="4" Name="TextBoxMaxGray" Style="{StaticResource MaterialDesignFloatingHintTextBox}" materialDesign:HintAssist.Hint="最大灰度值" Text="122"/>
<Button Margin="4" Style="{StaticResource MaterialDesignIconButton}" Name="ButtonShowEdges" Click="ButtonShowEdges_Click">
<Button.Content>
<materialDesign:PackIcon Kind="HumanRunFast"/>
</Button.Content>
</Button>
</StackPanel>
</Grid>
<ha:HSmartWindowControlWPF Grid.Row="1" Margin="4" Padding="8" Name="HWindowControlWPF1">
<ha:HIconicDisplayObjectWPF x:Name="HIconicDisplayObjectWPFImage" />
<ha:HIconicDisplayObjectWPF x:Name="HIconicDisplayObjectWPFRegion" HDraw="margin" HColor="red"/>
</ha:HSmartWindowControlWPF>
<StatusBar Grid.Row="2">
<StatusBarItem>
<StackPanel Orientation="Horizontal">
<Label Content="连通域数量:" VerticalAlignment="Center"/>
<TextBlock Name="TextBlockRegionNums" VerticalAlignment="Center"/>
</StackPanel>
</StatusBarItem>
</StatusBar>
</Grid>
</materialDesign:DialogHost>
</Window>
using HalconDotNet;
using System.IO;
using System.Windows;
using System.Windows.Controls.Primitives;
namespace FirstSolver
{
public partial class MainWindow : Window
{
/// <summary>
/// 对话框宿主标识符
/// </summary>
public const string DialogHostIdentifier = "RootDialog";
public MainWindow()
{
InitializeComponent();
}
private void ButtonSelectFile_Click(object sender, RoutedEventArgs e)
{
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog()
{
Filter = "Image|*.jpg;*.bmp;*.png;*.tif;*.tga;*.ras;*.jp2;*.j2k;*.jpe",
DereferenceLinks = true
};
if (dlg.ShowDialog() == true)
{
TextBoxImagePath.Text = dlg.FileName;
ButtonShowEdges.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
}
}
private void ButtonShowEdges_Click(object sender, RoutedEventArgs e)
{
string path = TextBoxImagePath.Text;
if (string.IsNullOrEmpty(path) || !File.Exists(path)) return;
HImage srcImage = new HImage(path);
HRegion region = srcImage.Threshold(double.Parse(TextBoxMinGray.Text), double.Parse(TextBoxMaxGray.Text));
HIconicDisplayObjectWPFImage.IconicObject = srcImage;
HIconicDisplayObjectWPFRegion.IconicObject = region;
int nums = region.Connection().CountObj();
TextBlockRegionNums.Text = $"{nums}";
}
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。