0


WPF做了一个VisionPro的小程序

最近一直在学习WPF,就试着用WPF做了一个小Demo,其中涉及到了很多东西;

  1. WPF如何添加VisionPro的控件;
  2. VisionPro二次开发中如何加载程序;
  3. VisionPro二次开发如何加载图片;
  4. VisionPro二次开发如何实时的更改参数;
  5. VisionPro二次开发如何获取结果,图片结果;
  6. VisionPro二次开发如何在图像上增加图形;

正题开始:

新建WPF程序应该是中间这个,不是下面那个,下面的使用不了;

项目属性做更改,取消32位首选

一、WPF中如何添加VisionPro的控件呢?

VisionPro中并没有WPF控件,只能像添加Winforms控件一样来添加了,其中需要引用两个重要的Dll,System.Windows.Forms与WindowsFormsIntegration 有可能找不到,没关系可以下载Everyting软件进行搜索,方便有快捷,下载地址如下:下载 - voidtools 超级好用的小工具,搜索那是相当的快,推荐!

WPF中引用后如何添加VisionPro控件呢?代码来了

  1. xmlns:Cog="clr-namespace:Cognex.VisionPro;assembly=Cognex.VisionPro.Controls"
  2. ********************************************************************
  3. <WindowsFormsHost>
  4. <Cog:CogRecordDisplay x:Name="cogdisplay"/>
  5. </WindowsFormsHost>

上面需要引用对应库,下面添加控件,给他名称,后台代码用名称实现逻辑就可以了。

二、VisionPro二次开发中如何加载程序

像Winforms一样先添加引用,再后台代码中添加对应的引用

using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;

如我要使用Toolblock工具来进行加载对应的程序,就必须引用这两个库,

CogToolBlock toolBlock = (CogToolBlock)CogSerializer.LoadObjectFromFile(String Path)Path为绝对路径,需要对应的扩展名的;CogJobManager 也是同样的方法;

三、VisionPro二次开发如何加载图片

using Cognex.VisionPro.ImageFile;

CogImageFileTool imgCog = new CogImageFileTool();

imgCog.Operator.Open(string Path, CogImageFileModeConstants.Read);

后面的 CogImageFileModeConstants.Read是必须要带的,读取图片;

加载图片有什么用呢?如果我们的Toolblock需要不同的图片,给Toolblock一个输入图片,就可以切换图片来运行Toolblock了。

Image即为我们所需要输入的图片,同样的FilterLowValue、FilterHighValue就是我们需要输入的参数,那该如何将我们需要的参数,图片输入到我们的程序中去呢?

四、VisionPro二次开发如何实时的更改参数

CogToolBlock toolBlock=new CogToolBlock();

//设置输入的参数,后面的数值也可以替换为Textbox的数值,进行int转换就可以了

toolBlock.Inputs["FilterLowValue"].Value = 5050;
toolBlock.Inputs["FilterHighValue"].Value = 8050;

只需要使用Inputs[名称].Value的值就可以了,后面的数值可以使用Textbox来进行输入;

五、 VisionPro二次开发如何获取结果,图片结果

程序都准备好了,我们该如何获取图片的结果呢?还有我们需要的结果呢?

这里是不是有三个截图图像,我们需要那一个就通过下面的代码取哪一张图,图像索引是通过0开始的,这里就是显示了第一张图;

//toolBlock中的工具组创建结果图像
ICogRecord cogRecord = toolBlock.CreateLastRunRecord();
//取出序号为0的图像
cogdisplay.Record = cogRecord.SubRecords[0];
//图像结果显示在控件上,并适应大小
cogdisplay.AutoFit = true;

同样的这里我获取了Blob工具个数,然后进行了二次判断,当Blob的个数大于零就为True,小于零就为Fail;

if ((bool)(toolBlock.Outputs["InspectionPassed"].Value) == true)
{

  1. //结果判断
  2. Result.Text = "OK";
  3. //改变字体颜色
  4. Result.Foreground = new SolidColorBrush(Colors.Green);
  5. //改变字体样式
  6. Result.FontWeight = FontWeights.Bold;

}

else
{
Result.Text = "NG";
Result.Foreground = new SolidColorBrush(Colors.Red);
Result.FontWeight = FontWeights.Bold;

}

这里通过了Outputs[对应名称].Value来进行判断;这就获取到了我们需要的数据。

六、VisionPro二次开发如何在图像上增加图形

在图像上增加十字线,增加圆形,标签等,都可以直接添加,当然也可以在VisionPro程序中添加,那样比较麻烦,而且不容易修改。在实时图像中添加图像也可以让我们更好的做项目,这个大家后期可能会碰到,也是我现在做的时候需要的。嘻嘻

那该如何添加图像呢?

//创建线工具
CogLine line1 = new CogLine();
//设置颜色
line1.Color = CogColorConstants.Red;
//线的坐标,这里只有一个坐标,不是两点一线吗?这里线visionPro是默认为水平线的,所以个点就确定了位置
line1.X = nwidth / 2 + Convert.ToDouble(StepX.Text); //需要double、int类型
line1.Y = nHeight / 2 - Convert.ToDouble(StepY.Text);
//绘制在我们的控件上面
cogdisplay.StaticGraphics.Add(line1, "line1");
CogLine line2 = new CogLine();
line2.Color = CogColorConstants.Red;
//取巧 第二个线进行了旋转
line2.SetXYRotation(line1.X, line1.Y, Math.PI / 2);
cogdisplay.StaticGraphics.Add(line2, "line2");

基本上就这么多了吧,下面是源码,有需要自取吧!

七、源代码

WPF前面UI 代码 做的比较丑,不要介意哈,O(∩_∩)O哈哈~

  1. <Window x:Class="WPF.Learn.MainWindow"
  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:Cog="clr-namespace:Cognex.VisionPro;assembly=Cognex.VisionPro.Controls"
  7. xmlns:local="clr-namespace:WPF.Learn"
  8. mc:Ignorable="d"
  9. Title="MainWindow" Height="500" Width="600">
  10. <Grid>
  11. <Grid.RowDefinitions>
  12. <RowDefinition/>
  13. <RowDefinition Height="100"/>
  14. </Grid.RowDefinitions>
  15. <WindowsFormsHost>
  16. <Cog:CogRecordDisplay x:Name="cogdisplay"/>
  17. </WindowsFormsHost>
  18. <Grid Grid.Row="1">
  19. <Grid.RowDefinitions>
  20. <RowDefinition Height="30"/>
  21. <RowDefinition/>
  22. </Grid.RowDefinitions>
  23. <StackPanel Orientation="Horizontal">
  24. <Button Content="加载程序" x:Name="LoadCogVpp" Margin="5" Click="LoadCogVpp_Click"/>
  25. <Button Content="运行程序" x:Name="RunVPP" Margin="5" Click="RunVPP_Click"/>
  26. <RadioButton Content="圆形" x:Name="Circle" VerticalAlignment="Center" Margin="5,0" IsChecked="True"/>
  27. <RadioButton Content="矩形" x:Name="Rectangle" VerticalAlignment="Center" Margin="5,0"/>
  28. <RadioButton Content="无图形" x:Name="Nothing" VerticalAlignment="Center" Margin="5,0"/>
  29. </StackPanel>
  30. <UniformGrid Grid.Row="2" Columns="4" Rows="3" Margin="5">
  31. <TextBlock Text="矩形宽:" HorizontalAlignment="Right" VerticalAlignment="Center"/>
  32. <TextBox Width="50" Height="15" HorizontalAlignment="Left" Margin="5,0" x:Name="RectWidth" Text="50"/>
  33. <TextBlock Text="矩形高:" HorizontalAlignment="Right" VerticalAlignment="Center"/>
  34. <TextBox Width="50" Height="15" HorizontalAlignment="Left" Margin="5,0" x:Name="RectHeight" Text="20"/>
  35. <TextBlock Text="圆形半径:" HorizontalAlignment="Right" VerticalAlignment="Center"/>
  36. <TextBox Width="50" Height="15" HorizontalAlignment="Left" Margin="5,0" x:Name="Radius" Text="100"/>
  37. <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" >
  38. <Run Text="结果"/>
  39. <Run Text="" x:Name="Result" Foreground="Green" FontWeight="Bold"/>
  40. </TextBlock>
  41. <TextBlock Text=""/>
  42. <TextBlock Text="偏移X:" HorizontalAlignment="Right" VerticalAlignment="Center"/>
  43. <TextBox Width="50" Height="15" HorizontalAlignment="Left" Margin="5,0" x:Name="StepX" Text="0"/>
  44. <TextBlock Text="偏移Y:" HorizontalAlignment="Right" VerticalAlignment="Center"/>
  45. <TextBox Width="50" Height="15" HorizontalAlignment="Left" Margin="5,0" x:Name="StepY" Text="0"/>
  46. </UniformGrid>
  47. </Grid>
  48. </Grid>
  49. </Window>

后台代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Controls.Primitives;
  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.Media.Media3D;
  15. using System.Windows.Navigation;
  16. using System.Windows.Shapes;
  17. using static System.Net.Mime.MediaTypeNames;
  18. using Cognex.VisionPro;
  19. using Cognex.VisionPro.ToolBlock;
  20. using System.Windows.Forms;
  21. using Cognex.VisionPro.Blob;
  22. using Cognex.VisionPro.ImageFile;
  23. namespace WPF.Learn
  24. {
  25. /// <summary>
  26. /// MainWindow.xaml 的交互逻辑
  27. /// </summary>
  28. public partial class MainWindow : Window
  29. {
  30. CogToolBlock toolBlock;
  31. CogBlobTool cogBlob;
  32. CogImageFileTool imgCog;
  33. public MainWindow()
  34. {
  35. InitializeComponent();
  36. }
  37. private void LoadCogVpp_Click(object sender, RoutedEventArgs e)
  38. {
  39. //加载Toolblock的文件,后面是绝对位置String类型
  40. toolBlock = (CogToolBlock)CogSerializer.LoadObjectFromFile("D:\\Program Files\\VisionPro\\samples\\Programming\\ToolBlock\\ToolBlockLoad\\TB.vpp");
  41. //加载Toolblock所需要的图片文件,同样的需要再Vpp程序里面增加输入的功能
  42. imgCog = new CogImageFileTool();
  43. imgCog.Operator.Open("D:\\Program Files\\VisionPro\\Images\\coins.idb", CogImageFileModeConstants.Read);
  44. //获取Toolblock程序里面Blob工具,名称就是程序里面的名称,可以进行修改,建议英文
  45. cogBlob = (CogBlobTool)toolBlock.Tools["CogBlobTool1"];
  46. //设置输入的参数,后面的数值也可以替换为Textbox的数值,进行int转换就可以了
  47. toolBlock.Inputs["FilterLowValue"].Value = 5050;
  48. toolBlock.Inputs["FilterHighValue"].Value = 8050;
  49. }
  50. private void RunVPP_Click(object sender, RoutedEventArgs e)
  51. {
  52. //CogImageFileTool必须运行才可以取到对应的图
  53. imgCog.Run();
  54. //注意这里需要进行8位图的转换,将图片传入Toolblock程序
  55. toolBlock.Inputs["Image"].Value = imgCog.OutputImage as CogImage8Grey;
  56. //Toolblock工具进行运行
  57. toolBlock.Run();
  58. //toolBlock中的工具组创建结果图像
  59. ICogRecord cogRecord = toolBlock.CreateLastRunRecord();
  60. //取出序号为0的图像
  61. cogdisplay.Record = cogRecord.SubRecords[0];
  62. //图像结果显示在控件上,并适应大小
  63. cogdisplay.AutoFit = true;
  64. //结果显示出来
  65. if ((bool)(toolBlock.Outputs["InspectionPassed"].Value) == true)
  66. {
  67. Result.Text = "OK";
  68. Result.Foreground = new SolidColorBrush(Colors.Green);
  69. Result.FontWeight = FontWeights.Bold;
  70. }
  71. else
  72. {
  73. Result.Text = "NG";
  74. Result.Foreground = new SolidColorBrush(Colors.Red);
  75. Result.FontWeight = FontWeights.Bold;
  76. }
  77. //图像上画图形
  78. DrawGraphics();
  79. }
  80. private void DrawGraphics()
  81. {
  82. //这里取巧使用了Blob工具的输入图像,一般为Toolblock的输入图片
  83. cogBlob.Run();
  84. int nwidth = cogBlob.InputImage.Width;
  85. int nHeight = cogBlob.InputImage.Height;
  86. //创建线工具
  87. CogLine line1 = new CogLine();
  88. //设置颜色
  89. line1.Color = CogColorConstants.Red;
  90. //线的坐标,这里只有一个坐标,不是两点一线吗?这里线visionPro是默认为水平线的,所以个点就确定了位置
  91. line1.X = nwidth / 2 + Convert.ToDouble(StepX.Text);
  92. line1.Y = nHeight / 2 - Convert.ToDouble(StepY.Text);
  93. //绘制在我们的控件上面
  94. cogdisplay.StaticGraphics.Add(line1, "line1");
  95. CogLine line2 = new CogLine();
  96. line2.Color = CogColorConstants.Red;
  97. //取巧 第二个线进行了旋转
  98. line2.SetXYRotation(line1.X, line1.Y, Math.PI / 2);
  99. cogdisplay.StaticGraphics.Add(line2, "line2");
  100. if (Circle.IsChecked == true)
  101. {
  102. //创建圆 就不一一解释了
  103. CogCircle drawCicle = new CogCircle();
  104. drawCicle.CenterX = nwidth / 2 + Convert.ToDouble(StepX.Text);
  105. drawCicle.CenterY = nHeight / 2 - Convert.ToDouble(StepY.Text);
  106. drawCicle.Radius = Convert.ToDouble(Radius.Text);
  107. drawCicle.Color = CogColorConstants.Red;
  108. cogdisplay.StaticGraphics.Add(drawCicle, "drawCicle");
  109. }
  110. else if (Rectangle.IsChecked == true)
  111. {
  112. //创建矩形 就不一一解释了
  113. CogRectangle rect = new CogRectangle();
  114. rect.Width = Convert.ToDouble(RectWidth.Text);
  115. rect.Height = Convert.ToDouble(RectHeight.Text);
  116. rect.Color = CogColorConstants.Red;
  117. rect.X = nwidth / 2 - rect.Width / 2 + Convert.ToDouble(StepX.Text);
  118. rect.Y = nHeight / 2 - rect.Height / 2 - Convert.ToDouble(StepY.Text);
  119. cogdisplay.StaticGraphics.Add(rect, "rect");
  120. }
  121. else
  122. {
  123. //清除所画的所有图形
  124. cogdisplay.StaticGraphics.Clear();
  125. }
  126. }
  127. }
  128. }

本文转载自: https://blog.csdn.net/Wangzhe910113/article/details/137923759
版权归原作者 Wangzhe910113 所有, 如有侵权,请联系我们删除。

“WPF做了一个VisionPro的小程序”的评论:

还没有评论