WPF之算法的单例模式
·
WPF之算法的单例模式

全局变量
public class GlobalParamters
{
//一 加载halcon引擎
public static HDevEngine myEngine = new HDevEngine();
public static bool IsDeug = false;
}
ZWModel
/// <summary>
/// 检测脏污参数
/// </summary>
public class ZWModel
{
[Category("缺陷检测参数"), Description("宽度阈值,高于阈值,算缺陷")]
public double Width_Thre { get; set; } = 10;
[Category("缺陷检测参数"), Description("高度阈值,高于阈值,算缺陷")]
public double Height_Thre { get; set; } = 10;
[Category("缺陷检测参数"), Description("面积阈值,高于阈值,算缺陷")]
public double Area_Thre { get; set; } = 100;
}
一 HalconAlgo
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WPF之AOI缺陷检测软件.Models;
namespace WPF之AOI缺陷检测软件.Algorithm
{
/// <summary>
/// Halcon算法类
/// </summary>
public class HalconAlgo
{
//一 加载halcon引擎
//二 设置halcon引擎初始化halcon文件位置
//三 获取调用方法
//四 初始化程序调用变量
//五 设置输入参数
//六 运行执行函数
//七获得运行的结果
public HalconAlgo()
{
//二 设置halcon引擎初始化halcon文件位置
GlobalParamters.myEngine.SetProcedurePath(@"C:\\Users\\Jumy\\Desktop\\工业机器视觉之AOI外观检测软件(WinForm+Halcon+海康相机)-V1\\代码程序\\四 算法模块");
}
public HObject DetectZW(HObject image, ZWModel zWModel)
{
//三 获取调用方法
HDevProcedure fun1 = new HDevProcedure("DetectZW2");
//四 初始化程序调用变量
HDevProcedureCall fun1_call = new HDevProcedureCall(fun1);
//五 设置输入参数
fun1_call.SetInputIconicParamObject("Image", image);
//六 运行执行函数
if (GlobalParamters.IsDeug)
{
fun1_call.SetWaitForDebugConnection(true);
}
else
{
fun1_call.SetWaitForDebugConnection(false);
}
fun1_call.Execute();
//七获得运行的结果
HObject defectRegion = fun1_call.GetOutputIconicParamObject("SelectedRegions1");
double areaThre = zWModel.Area_Thre;
double widthThre = zWModel.Width_Thre;
double heightThre = zWModel.Height_Thre;
HOperatorSet.RegionFeatures(defectRegion, "area", out HTuple Area);
HOperatorSet.RegionFeatures(defectRegion, "width", out HTuple Width);
HOperatorSet.RegionFeatures(defectRegion, "height", out HTuple Height);
if (Area.Length > 0)
{
// 任意一个参数超过阈值我们就返回缺陷区域,否则返回null
if (Area.D >= areaThre || Width.D >= widthThre || Height.D >= heightThre)
{
return defectRegion;
}
else
{
return null;
}
}
else
{
return null;
}
}
}
}
二 AlgorithmService
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WPF之AOI缺陷检测软件.Models;
namespace WPF之AOI缺陷检测软件.Algorithm
{
public class AlgorithmService
{
//1. 私有静态变量(在第四步供外界使用),创建类的实例
//2. 私有构造函数,确保外部无法直接实例化(确保是单个实例)
//3. 确定供外界调用的代码资源
//4. 公开静态属性,供外界使用(把第一步类的实例,开放出去)
//5. 外界使用
//1. 私有静态变量(在第四步供外界使用),创建类的实例
private static AlgorithmService instance = new AlgorithmService();
//2. 私有构造函数,确保外部无法直接实例化(确保是单个实例)
private AlgorithmService()
{
}
//4. 公开静态属性,供外界使用(把第一步类的实例,开放出去)
public static AlgorithmService Instance
{
get { return instance; }
}
//3. 确定供外界调用的代码资源
public HalconAlgo halconAlgo = new HalconAlgo();
/// <summary>
/// 检测脏污缺陷
/// </summary>
/// <param name="image"></param>
/// <param name="zWModel"></param>
/// <returns></returns>
public HObject DetectZW(HObject image, ZWModel zWModel)
{
return halconAlgo.DetectZW(image, zWModel);
}
}
}
三 UI
3.1 安装:Extended.Wpf.Toolkit

3.2 UI

引入命名空间
xmlns:extoolkit="http://schemas.xceed.com/wpf/xaml/toolkit"
<!--缺陷检测界面-->
<TabItem Header="缺陷检测">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="6*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<extoolkit:PropertyGrid Name="propertyGrid_DefectParams" Background="AliceBlue" Grid.Column="0" ></extoolkit:PropertyGrid>
<WindowsFormsHost Grid.Column="1">
<halconTool:HWindow_Final x:Name="hWindow_Final_DetectWin"/>
</WindowsFormsHost>
<StackPanel Grid.Column="2">
<Button x:Name="btn_LoadImage_MaoCi" Content="加载图像" Margin="10" Command="{Binding btn_LoadImage_MaoCi_Command}"></Button>
<Button x:Name="btn_Detect" Content="缺陷检测" Margin="10" Command="{Binding btn_Detect_Command}" Cursor="Hand"></Button>
<Button x:Name="btn_SaveParams" Content="保存算法参数" Margin="10" Command="{Binding btn_SaveParams_Command}" Cursor="Hand"></Button>
</StackPanel>
</Grid>
</TabItem>
加载图像命令
#region 加载图像
public RelayCommand btn_LoadImage_MaoCi_Command
{
get { return new RelayCommand(LoadImage); }
}
HObject CurrImage;
public void LoadImage()
{
System.Windows.Forms.OpenFileDialog fileDialog = new System.Windows.Forms.OpenFileDialog();
if (fileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string fileName = fileDialog.FileName;
// 根据路径,输出图像
HOperatorSet.ReadImage(out CurrImage, fileName);
Application.Current.Dispatcher.BeginInvoke((Action)(() => {
// 1.获取到_mainWindow窗口
var _mainWindow = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
// 2.获取窗口上的Halcon的显示控件,显示图像
_mainWindow.hWindow_Final_DetectWin.HobjectToHimage(CurrImage);
}));
}
}
#endregion
检测缺陷命令
#region 检测缺陷
public RelayCommand btn_Detect_Command
{
get { return new RelayCommand(DetectImage); }
}
public void DetectImage()
{
Application.Current.Dispatcher.BeginInvoke((Action)(() => {
// 1.获取到_mainWindow窗口
var _mainWindow = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
HObject ZWRegion = AlgorithmService.Instance.DetectZW(CurrImage, (ZWModel)(_mainWindow.propertyGrid_DefectParams.SelectedObject));
// 2.获取窗口上的Halcon的显示控件,显示图像
_mainWindow.hWindow_Final_DetectWin.HobjectToHimage(CurrImage);
if (ZWRegion != null)
{
_mainWindow.hWindow_Final_DetectWin.DispObj(ZWRegion, "red");
}
}));
}
#endregion
保存算法参数
#region 保存算法参数
public RelayCommand btn_SaveParams_Command
{
get { return new RelayCommand(SaveParams); }
}
public void SaveParams()
{
Application.Current.Dispatcher.BeginInvoke((Action)(() => {
// 1.获取到_mainWindow窗口
var _mainWindow = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
ZWModel zWModelParam = (ZWModel)_mainWindow.propertyGrid_DefectParams.SelectedObject;
XmlSerializerHelper.WriteXML(zWModelParam, @"D:\\AOI外观检测软件参数\\ZWModel.xml", typeof(ZWModel));
MessageBox.Show("保存成功!");
}));
}
#endregion
加载算法参数
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
// 读取XML文件
if (File.Exists(@"D:\\AOI外观检测软件参数\\ZWModel.xml"))
{
propertyGrid_DefectParams.SelectedObject = XmlSerializerHelper.ReadXML(@"D:\\AOI外观检测软件参数\\ZWModel.xml", typeof(ZWModel));
}
else
{
// 加载模板匹配参数
propertyGrid_DefectParams.SelectedObject = new ZWModel();
}
}
更多推荐

所有评论(0)