c#visionpro开发 方法统计
toolblock开发
vpp第二种简单加载方式
public Cognex.VisionPro.ToolBlock.CogToolBlock ToolBlock1;//初始化后实例化一个方法
//窗口运行程序内部
ToolBlock1 = (CogToolBlock)CogSerializer.LoadObjectFromFile(“tjjc.vpp”);
MessageBox.Show(“算法加载成功”);//复制一个vpp到程序内部 并将属性选择为始终复制。
第一步引用
引用
using System.Net.Sockets;
using System.Net;
using System.Threading;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro.ImageFile;
using Cognex.VisionPro;
using System.IO;
第二步
在初始化步骤之后
public string VppPath = System.Windows.Forms.Application.StartupPath;//读取软件启动地址 自动读取文件在盘中的位置
实例化一个工具
Public static Cognex.VisionPro.ToolBlock.CogToolBlock ToolBlock1 = new Cognex.VisionPro.ToolBlock.CogToolBlock();//实例化toolblock工具
vpp名称
string CogToolBlock1Name = “CogToolBlock1.vpp”;//创建一个字符串vpp名称备用
实例化所需要的工具 例如 相机
public CogImageFileTool gImageFileTool = new CogImageFileTool();//实例化图片打开
public static Cognex.VisionPro.CogAcqFifoTool CamTool1 = new CogAcqFifoTool();//实例化相机工具
string CamtoolName1 = “cogAcqFifoTool1.vpp”;
string SaveImagesPath = “D:\SaveImages\CAM1”;
获取时间
DateTime now = DateTime.Now;now变量存储当前时间 使用方式
yyymmmdddsss;
第三步
private void Form1_Load(object sender, EventArgs e)//创建一个任务
Try 试着去运行一段程序
{
textBox1.Text = iniFile.IniReadValue(“设置”, “IP地址”, ConfigPath + “设置.ini”);
textBox2.Text = iniFile.IniReadValue(“设置”, “端口号”, ConfigPath + “设置.ini”);
comboBox1.Text = iniFile.IniReadValue(“设置”, “类型”, ConfigPath + “设置.ini”);
Pixlength.Text = iniFile.IniReadValue(“设置”, “像素当量”, ConfigPath + “设置.ini”);
InitialX.Text = iniFile.IniReadValue(“设置”, “机械手初始位置X”, ConfigPath + “设置.ini”);
InitialY.Text = iniFile.IniReadValue(“设置”, “机械手初始位置Y”, ConfigPath + “设置.ini”);
//SP.showLoadMessage("正在算法程序!");string fileName1 = VppPath + "\\IVS\\" + CogToolBlock1Name;
ToolBlock1 = (Cognex.VisionPro.ToolBlock.CogToolBlock)(CogSerializer.LoadObjectFromFile(fileName1)); ToolBlock1=(Cognex.VisionPro.ToolBlock.CogToolBlock)(CogSerializer.LoadObjectFromFile(fileName1));//加载路径把VPP给toolblock1
this.cogToolBlockEditV21.Subject = ToolBlock1;//把toolblock给界面的工具
string fileNameCam1 = VppPath + “\IVS\” + CamtoolName1;
CamTool1=(Cognex.VisionPro.CogAcqFifoTool)(CogSerializer.LoadObjectFromFile(fileNameCam1));//加载路径把相机设置给CamTool1
cogAcqFifoEditV21.Subject = CamTool1;
listboxmessage(“算法加载成功”, Brushes.Green);
listboxmessage(“相机加载成功”, Brushes.Green);
}
catch (Exception ex)
{
listboxmessage(“算法加载失败”, Brushes.Red);
listboxmessage(“相机加载失败”, Brushes.Red);
}
加载工作完成;
进入下一步;
触发运行阶段;
this.openFileDialog1.FileName = “”;
openFileDialog1.Filter = “Image Files(.BMP;.JPEG;.TIF;.PNG)|.BMP;.JPEG;.TIF;.PNG”;
openFileDialog1.ShowDialog();string strFileName = openFileDialog1.FileName;Bitmap BitmapAR = (Bitmap)Image.FromFile(strFileName);Bitmap Bitmap;Bitmap = (Bitmap)Image.FromFile(strFileName);CogImage24PlanarColor cogImage24PlanarColor = new CogImage24PlanarColor((Bitmap)Bitmap);//彩色图像//CogImage8Grey cogImage8Gray = new CogImage8Grey((Bitmap)Bitmap);//黑白图像//iCogImage = (ICogImage)cogImage8Gray;
实例化图像格式;
下一步;如果收到触发信号 取图工具准备 运行 加载图像到toolblock 运行。
if (strFileName != “”)
{
gImageFileTool.Operator.Open(strFileName, CogImageFileModeConstants.Read);
gImageFileTool.Run();
//cogRecordDisplay1.Image = cogImage8Gray;
ToolBlock1.Inputs[0].Value = gImageFileTool.OutputImage as Cognex.VisionPro.CogImage24PlanarColor;//把加载后的图像给toolblock的图像输入
ToolBlock1.Run();
}
另一种运行方式
string imageName = “CAM1.bmp”;
SaveSouceImage(SaveImagesPath, imageName, CamTool1.OutputImage);//保存图像到那个位置
//display.AddTextOnImage(display.cogRecordDisplay1, “OK”, 300, 300, CogColorConstants.Green, 70, false);
ToolBlock1.Inputs[0].Value = CamTool1.OutputImage as Cognex.VisionPro.CogImage24PlanarColor;//此处为黑白图像输入图像为取图工具输出图像
ToolBlock1.Run();//运行
cogRecordDisplay1.Image = null;//运行前清除画面
cogRecordDisplay1.StaticGraphics.Clear();
cogRecordDisplay1.InteractiveGraphics.Clear();//运行前清除画面
cogRecordDisplay1.Record = ToolBlock1.CreateLastRunRecord().SubRecords[3];//处理后图像显示
cogRecordDisplay1.Fit();//自适应
string Xpix = ToolBlock1.Outputs[0].Value.ToString();//结果获取
string Ypix = ToolBlock1.Outputs[1].Value.ToString();//结果获取
double count = Convert.ToDouble(ToolBlock1.Outputs[2].Value);//结果获取
string X1pix = ToolBlock1.Outputs[3].Value.ToString();//结果获取
string Y1pix = ToolBlock1.Outputs[4].Value.ToString();//结果获取
string X2pix = ToolBlock1.Outputs[5].Value.ToString();//结果获取
string Y2pix = ToolBlock1.Outputs[6].Value.ToString();//结果获取
运行完成;
跨窗体调用参数
public Form2(Form1 mform1)
{
InitializeComponent();
mform = mform1;}Form1 mform = null;
读取复选框中的数据
if (comboBox1.SelectedItem.ToString()“管理员”&& textBox3.Text"123456")
{
button6.Enabled = true;
}
else if (comboBox1.SelectedItem.ToString() == “工程师” && textBox3.Text == “123456”)
{
button6.Enabled = true;
button7.Enabled = true;//按钮=true可以选择
}
调用窗体程序
Form2 f = new Form2(this);
f.ShowDialog();//打开新窗体
private void button9_Click(object sender, EventArgs e)//占用主线程示例
{
Thread.Sleep(3000);
MessageBox.Show(“第一步完成”);
Thread.Sleep(5000);
MessageBox.Show(“第二步完成”);
}
private void button10_Click(object sender, EventArgs e)//thread开线程示例{Thread t = new Thread(()=> {Thread.Sleep(3000);MessageBox.Show("第一步完成");Thread.Sleep(5000);MessageBox.Show("第二步完成");});t.Start();}private void button11_Click(object sender, EventArgs e)//task开线程示例(常用){Task.Run(()=>{Thread.Sleep(3000);MessageBox.Show("第三步完成");Thread.Sleep(5000);MessageBox.Show("第四步完成");});
多线程同时运行 如何一步一步运行;
(添加async属性)(await等待运行)
private async void button12_Click(object sender, EventArgs e)
{
await Task.Run(() =>
{
Thread.Sleep(3000);
MessageBox.Show(“第三步完成”);
});
await Task.Run(() =>
{
Thread.Sleep(5000);
MessageBox.Show(“第四步完成”);
});
MessageBox.Show(“全部完成”);
}
特殊开线程的一种方法timer
using System.Threading;//引用一个类
public System.Threading.Timer timer2;//实例化一个timer
timer2 = new System.Threading.Timer(t, null, 1000, 1000);//定义一个timer数据。T 方法 null这个值可以为空 1000第一次运行的时间 1000往后每次的时间。
private void t (object obj)
{
this.Invoke(new Action(() =>//委托 跨线程访问。
//程序运行区域;
}
手动timer暂停的方法
Timer.change(Timeout.Infinite,Timeout.Infinite)
重新启动的方法
Timer.change(0,1000);//恢复计时器
弹窗确认后继续运行的方法
DialogResult result = MessageBox.Show(“是否确认继续运行程序?”, “提示”, MessageBoxButtons.YesNo);
if (result == DialogResult.Yes){// 用户选择确认,继续运行程序Console.WriteLine("程序继续运行...");}else{// 用户选择取消,不继续运行程序Console.WriteLine("程序停止运行...");return;}
相关文章:
c#visionpro开发 方法统计
toolblock开发 vpp第二种简单加载方式 public Cognex.VisionPro.ToolBlock.CogToolBlock ToolBlock1;//初始化后实例化一个方法 //窗口运行程序内部 ToolBlock1 (CogToolBlock)CogSerializer.LoadObjectFromFile(“tjjc.vpp”); MessageBox.Show(“算法加载成功”);//复制一个…...
dedecms——四种webshell姿势
姿势一:通过文件管理器上传WebShell 步骤一:访问目标靶场其思路为 dedecms 后台可以直接上传任意文件,可以通过文件管理器上传php文件获取webshell 步骤二:登陆到后台点击【核心】--》 【文件式管理器】--》 【文件上传】将准备好…...
GO GIN 推荐的库
在使用 Go 和 Gin 框架进行 Web 开发时,有许多第三方库可以增强功能和提高开发效率。以下是一些常用的、与 Gin 搭配使用的库: 1. 数据处理与验证 go-playground/validator 用于结构体字段的验证,Gin 默认已经集成了它。它提供了丰富的验证…...
YOLOv9改进策略【卷积层】| GnConv:一种通过门控卷积和递归设计来实现高效、可扩展、平移等变的高阶空间交互操作
一、本文介绍 本文记录的是利用GnConv优化YOLOv9的目标检测方法研究。YOLOv9在进行目标检测时,需要对不同层次的特征进行融合。GnConv可以考虑更高阶的空间交互,能够更好地捕捉特征之间的复杂关系,从而增强特征融合的效果,提高模…...
如何在Linux下升级R版本和RStudio
一、升级R版本 在Linux上,R的安装通常通过包管理器完成。不同的Linux发行版(如Ubuntu、Debian、Fedora等)可能略有不同。下面以Ubuntu为例,介绍如何升级R版本。如果你使用其他发行版,步骤可能类似。 二.更新步骤 2.…...
npm安装时候报错certificate has expired
打开了一个很久没用的电脑,npm和node都装好了,安装包的时候一直报错 request to https://registry.npm.taobao.org/create-react-app failed, reason: certificate has expired而且先报错rollbackFailedOptional 然而npm没什么问题,是ssl过…...
CSP-J_S第一轮复习资料1·计算机硬件
下一章...
oracle 表的外键
表的外键 3.5.1表之间的三种关系 在数据库设计中,工作中经常会分析商业逻辑中的表的设计。在设计表的关系之前,需要先了解关系型数据库特点。关系数据库有如下特点: 关系型数据库采用了关系模型来组织数据的数据库。 关系型数据库的最大特点…...
加密与安全_优雅存储二要素(AES-256-GCM )
文章目录 什么是二要素如何保护二要素(姓名和身份证)加密算法分类场景选择算法选择AES - ECB 模式 (不推荐)AES - CBC 模式 (推荐)GCM(Galois/Counter Mode)AES-256-GCM简介AES-256-GCM工作原理安全优势 应用场景其他模式 和 敏感…...
【C++高阶】解锁C++的深层魅力——探索特殊类的奥秘
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:C 类型转换 🌹🌹期待您的关注 🌹🌹 ❀C特殊类 📒1. 不能被拷贝…...
Vue学习记录之三(ref全家桶)
ref、reactive是在 setup() 声明组件内部状态用的, 这些变量通常都要 return 出去,除了供 < template > 或渲染函数渲染视图,也可以作为 props 或 emit 参数 在组件间传递。它们的值变更可触发页面渲染。 ref :是一个函数&…...
第二十六篇——九地篇:九种形势的应对之道
目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 地势的维度重新阐述了懂得人心的重要性,道久其归一为为别人。…...
学习记录:js算法(三十七): 搜索二维矩阵
文章目录 搜索二维矩阵我的思路网上思路 总结 搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵: ● 每行中的整数从左到右按非严格递增顺序排列。 ● 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中&a…...
拥控算法BBR入门1
拥塞控制算法只与本地有关 一个TCP会话使用的拥塞控制算法只与本地有关。 两个TCP系统可以在TCP会话的两端使用不同的拥塞控制算法 Bottleneck Bandwidth and Round-trip time Bottleneck 瓶颈 BBR models the network to send as fast as the available bandwidth and is 2…...
[Python数据可视化]Plotly Express: 地图数据可视化的魅力
在数据分析和可视化的世界中,地图数据可视化是一个强大而直观的工具,它可以帮助我们更好地理解和解释地理数据。Python 的 Plotly Express 库提供了一个简单而强大的方式来创建各种地图。本文将通过一个简单的示例,展示如何使用 Plotly Expre…...
windows C++ 并行编程-PPL 中的取消操作(四)
并行模式库 (PPL) 中取消操作的角色、如何取消并行工作以及如何确定取消并行工作的时间。 运行时使用异常处理实现取消操作。 请勿在代码中捕捉或处理这些异常。 此外,还建议你在任务的函数体中编写异常安全的代码。 例如,可以使用获取资源即初始化 (RA…...
【数据结构】字符串与JSON字符串、JSON字符串及相应数据结构(如对象与数组)之间的相互转换
前言: 下面打印日志用的是FastJSON依赖库中的 Log4j2。依赖: <!-- Alibaba Fastjson --> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.80</version> …...
LeetcodeTop100 刷题总结(一)
LeetCode 热题 100:https://leetcode.cn/studyplan/top-100-liked/ 文章目录 一、哈希1. 两数之和49. 字母异位词分组128. 最长连续序列 二、双指针283. 移动零11. 盛水最多的容器15. 三数之和42. 接雨水(待完成) 三、滑动窗口3. 无重复字符的…...
Next-ViT: 下一代视觉Transformer,用于现实工业场景中的高效部署
摘要 由于复杂的注意力机制和模型设计,大多数现有的视觉Transformer(ViTs)在实际的工业部署场景中,如TensorRT和CoreML,无法像卷积神经网络(CNNs)那样高效运行。这提出了一个明显的挑战&#x…...
C++知识点示例代码助记
C语言设计期末知识点附示例代码。 1. 基础语法 变量和数据类型: int a 10; // 整型 float b 5.25f; // 单精度浮点型 double c 5.25; // 双精度浮点型 char d A; // 字符型 bool e true; // 布尔型 const int PI 3.14; // 常量输入输出&…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
