工业机器视觉megauging(向光有光)使用说明书(十四,轻量级的visionpro)

程序中如何调用动态库并运行,取出结果呢?

我们这一节就介绍一下:

第一,取一帧图像,传给工具组运行一下(即工具组运行一次):

  meGaugingExt1.ToolGroupRun();//这个就是我们相机1运行一次,把图像给所有工具去处理

相机2取一帧图像运行一下,类同,

meGaugingExt2.ToolGroupRun();

相机三也一样操作,meGaugingExt3.ToolGroupRun();

这样我们就把相机和工具组绑定在一起了,这个和visionpro很像

第二,工具组中的工具,我如下定义:

 MeGaugingExt.ImageSourceForm secondhello =null;//第一个工具,图像源

  MeGaugingExt.FormBlob firstHello = new MeGaugingExt.FormBlob();     //斑blob form
        MeGaugingExt.ContourFigure shapeMatch = null;//形状匹配form
        MeGaugingExt.Fixture thirdhello = null;//fixture1 form,跟随blob
        MeGaugingExt.Fixture thirdhello1 = null;//fixture2 form,跟随形状匹配

        MeGaugingExt.CaliLG caliform = null;//九点标定form

 

第二,工具组运行一次,我们给上面定义的工具赋值:(以相机1和工具组1为例,相机2,相机3类同),meGaugingExt1与相机一捆绑在一起,代表工具组1.

  meGaugingExt1.ToolGroupRun();

    secondhello = meGaugingExt1.getImage();

  if (secondhello != null)

{ firstHello = meGaugingExt1.getBlobMatch();} 

 if (meGaugingExt1.cali传递blob)
            {
             
                caliform = meGaugingExt1.getcali();
            }
            if (meGaugingExt1.blob传递fix)
            {
                   thirdhello = meGaugingExt1.getfixt();//fixture1 for blob              
                           
                globRet = thirdhello.Fix_LT;//
                globfixgl = thirdhello.Fix_GL;//线,相对定位

            }
            if (meGaugingExt1.cali传递matchshape)
            {
                shapeMatch = meGaugingExt1.getshape();//这句话很重要202303201458,刚才所有异常都和他相关。
                globRetShape = shapeMatch.Fix_LT;
            }
            if (meGaugingExt1.matchshape传递fixture2)
            {
                //要有fixture2的连线,才能执行下面这句被注释的话202311301557
                  thirdhello1 = meGaugingExt1.getfixt2();//fixture2 for shapematch
            }

第三,上面第二中注释为红色加粗的,是相机1对应的工具组运行一次后,可以取到的结果。

下面这句话是传递标定后的坐标系,给坐标变换用的:

 if (firstHello != null)
                    m_roiCoord显示1.m_RoiBase.DragOrgEx(new PointF((float)(firstHello.Frame_X / 2f), (float)(firstHello.Frame_Y / 2f)), firstHello.Frame_A);

//这里除以2f的原因是显示是1024*768变成512*384,主要在picturebox1_paint中用。

第四,还有一些取结果的操作在picturebox1_paint中,比如轮廓之类的。大家详细查看

第五,这里主要讲一下坐标变换

我们要把像素转换到毫米坐标,靠的是九点标定,这里已经传递过来,我们直接调用就好:

tempframept = m_roiCoord显示1.m_RoiBase.mapPoint(new PointF((float)globRet.startPt.X, (float)globRet.startPt.Y), 2);//比例2,斑的中心位置针对机器人坐标的变换
                     float 均值x = (float)((tempframept.X) / 间距);
                     float 均值y = (float)((tempframept.Y) / 间距);//换算为mm坐标

                     textBox1.Text = "";
                     textBox1.Text += "斑心x,y:" + 均值x.ToString() + "mm ;" + 均值y.ToString() + "mm \r\n";

这个是计算找到斑的斑心

另一个是找到直线的起始点和终点的毫米坐标

 tempframept1 = m_roiCoord显示1.m_RoiBase.mapPoint(new PointF((float)globRet.endPt.X, (float)globRet.endPt.Y), 2);//比例2,斑的中心位置针对机器人坐标的变换              
                     tempframept = m_roiCoord显示1.m_RoiBase.mapPoint(new PointF(globfixgl.startPt.X, globfixgl.startPt.Y), 1);//查看返回,已经处理过比例了202210061055
                     均值x = (float)((tempframept.X * 2) / 间距);
                     均值y = (float)((tempframept.Y * 2) / 间距);//换算为mm坐标
                     textBox1.Text += "抓线的起点:" + 均值x.ToString() + "mm;" + 均值y.ToString() + "mm \r\n";

                     tempframept = m_roiCoord显示1.m_RoiBase.mapPoint(new PointF(globfixgl.endPt.X, globfixgl.endPt.Y), 1);
                     均值x = (float)((tempframept.X * 2) / 间距);
                     均值y = (float)((tempframept.Y * 2) / 间距);//换算为mm坐标
                     textBox1.Text += "抓线的终点:" + 均值x.ToString() + "mm;" + 均值y.ToString() + "mm \r\n";

上面的问题比较容易一点,下面略微复杂一点:

你要知道,我们的坐标系有时你怎么旋转,都转不到你想要的坐标系,只有到位了,翻转才可以,所以我们引入了坐标系翻转,下面注意两个问题:

第一,坐标系翻转后怎么画出来?代码如下:

    if (caliform.m_bcoord翻转)         
                { 
                    m_roiCoord显示1.m_RoiBase.convertCoordinate();
                    m_roiCoord显示1.m_RoiBase.DrawLineAndRect(g, new Pen(Color.Red, 1)); }

第二,坐标系翻转后怎么计算我们想要的值?代码如下:

   if (caliform.m_bcoord翻转)

{

  tempframept = m_roiCoord显示1.m_RoiBase.mapPointTest(new PointF((float)globRet.startPt.X, (float)globRet.startPt.Y), 2);//比例2,斑的中心位置针对机器人坐标的变换
                     float 均值x = (float)((tempframept.X) / 间距);
                     float 均值y = (float)((tempframept.Y) / 间距);//换算为mm坐标

                     textBox1.Text = "";
                     textBox1.Text += "斑心x,y:" + 均值x.ToString() + "mm ;" + 均值y.ToString() + "mm \r\n";

}

我们的程序里只设计了针对x轴,翻转y轴,应该是够用了,如果不够用,告诉我,我们再探讨,看是否把针对y轴,翻转x轴的程序也加上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/192750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端入门(五)Vue3组合式API特性

文章目录 Vue3简介创建Vue3工程使用vite创建vue-cli方式 常用 Composition API启动项 - setup()setup的执行时机与参数 响应式原理vue2中的响应式vue3中的响应式ref函数reactive函数reactive与ref对比 计算属性 - computed监视属性 - watchwatchEffect Vue3生命周期自定义hook函…

服务器数据恢复—V7000存储raid5崩溃导致上层卷无法使用的数据恢复案例

服务器数据恢复环境: 某品牌V7000存储中有一组由几十块硬盘组建的raid5阵列。上层操作系统为windows server,NTFS分区。 服务器故障: 有一块硬盘出现故障离线,热备盘自动上线替换离线硬盘。在热备盘上线同步数据的过程&#xff0c…

西南科技大学模拟电子技术实验五(集成运算放大器的应用设计)预习报告

一、计算/设计过程 设计一:用集成运放设计一个输入为0.05v,放大为-100的反相比例运算电路。 对于理想电路,反相比例运算电路的输出电压与输入电压之间的关系如下: =-100,所以 =100 若是假定R1为100k,则R2= =1k 为了减小输入级偏置电流引起的运算误差,在同相输入端…

解决:IDEA的debug模式只有第一次能拦截请求进行debug,后续所有请求全部失效

解决:IDEA的debug模式只有第一次能拦截请求进行debug,后续所有请求全部失效 一问题描述:IDEA的debug模式只有第一次能拦截请求进行debug,后续所有请求全部失效二问题原因:对IDEA的debug功能不熟悉或者理解有偏差三解决…

数学字体 Mathematical fonts

Mathematical fonts 数学字体: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzRQSZ \\ \mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzRQSZ} \\ \mathfrak{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzRQSZ} \\ \mathbb{ABC…

HTML标签

1&#xff0c;HTML语法规范 1.1基本语法概述 1&#xff0c;HTML标签是由<>包围的关键词&#xff0c;例如<html> 2&#xff0c;HTML标签通常是成对出现的&#xff0c;例如<html>和</html>,称为双标签。标签对中的第一个标签是开始标签&#xff0c;第…

LC-1423. 可获得的最大点数(子数组和、枚举)

1423. 可获得的最大点数 中等 几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#xff0c;最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之…

分治-归并算法——LCR 170. 交易逆序对的总数

文章目录 &#x1f33c;0. 归并排序&#x1f33b;1. 题目&#x1f33c;2. 算法原理&#x1f337;3. 代码实现 &#x1f33c;0. 归并排序 归并排序是典型的分治&#xff0c;将数组分成若干个子数组&#xff0c;数组两两比较&#xff0c;不是很清楚的&#xff0c;可以查看此篇文…

信息学奥赛一本通1187:统计字符数

1187&#xff1a;统计字符数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 28160 通过数: 16067 【题目描述】 给定一个由a-z这26个字符组成的字符串&#xff0c;统计其中哪个字符出现的次数最多。 【输入】 输入包含一行&#xff0c;一个字符串&#xff0c;长度…

鸿蒙(HarmonyOS)应用开发——容器组件(Grid组件)

前言 前面一篇文章中&#xff0c;已经说了List组件。那么接下来就是容器组件中的Grid组件 #mermaid-svg-oz1b7w45ASmMlZFa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-oz1b7w45ASmMlZFa .error-icon{fill:#5522…

css Position(定位)

position 属性指定了元素的定位类型 position属性的五个值&#xff1a; staticrelativefixedabsolutesticky 元素可以使用的顶部&#xff0c;底部&#xff0c;左侧和右侧属性定位。然而&#xff0c;这些属性无法工作&#xff0c;除非是先设定position属性。他们也有不同的工…

vue 组件通讯

组件通讯的方案 通过 props 传递 (父子组件传值)通过 $emit 触发 父组件自定义事件父组件使用 ref 访问子组件实例EventBus &#xff1a;需要中间文件&#xff0c;$emit触发事件&#xff0c;$on监听$parent 或者 $root : 可以利用祖先组件搭桥 this.$parent.on(add,this.add) …

最大单词数算法分析

题目描述&#xff1a; 算法一&#xff1a; 代码实现&#xff1a; # include<stdio.h> # include<string.h>int main(){//char text[100]"leet code";//char brokenLetters[26]"lt";char text[100]"hello world";char brokenLetters…

HBASE命令行查看中文字符

问题记录 中文显示的是编码字符不方便查看value\xE5\xB8\xB8\xE5\xAE\x89\xE5\xAE\x891修改前中文显示&#xff1a; 解决方法 1、列族 : 列名 : toString ’2、列族 : 列名 : c(org.apache.hadoop.hbase.util.Bytes).toString ’ scan karry:student,{COLUMNS > [info:…

国际语音通知是什么?国际语音通知系统有哪些功能?

一、国际语音通知是什么&#xff1f; 如同国际短信通知&#xff0c;国际语音通知也在多种生活场景中扮演着重要的角色&#xff0c;如会议通知、商品发货通知、物流更新通知、快递取件通知、外卖取餐通知等。那么什么是语音通知呢&#xff1f; 国际语音通知可将通知的文本信息使…

外包干了2年,技术退步明显。。。

前言 简单的说下&#xff0c;我大学的一个同学&#xff0c;毕业后我自己去了自研的公司&#xff0c;他去了外包&#xff0c;快两年了我薪资、技术各个方面都有了很大的提升&#xff0c;他在外包干的这两年人都要废了&#xff0c;技术没一点提升&#xff0c;学不到任何东西&…

Linux驱动开发学习笔记1《字符设备驱动开发》

目录 一、字符设备驱动简介 二、chrdevbase 字符设备驱动开发实验 1.创建驱动程序的目录 2.创建vscode工程 3.编写实验程序 4.编译驱动程序和测试APP代码 &#xff08;1&#xff09;加载驱动模块 &#xff08;2&#xff09;创建设备节点文件 &#xff08;3&#xff…

解决 MySQL 5.7 中的字符集兼容性问题

解决 MySQL 5.7 中的字符集兼容性问题 问题描述 错误信息&#xff1a;在 MySQL 5.7 环境中&#xff0c;尝试使用 utf8mb4_0900_ai_ci 字符集排序规则时出现错误。原因&#xff1a;utf8mb4_0900_ai_ci 是 MySQL 8.0 引入的&#xff0c;而不支持 MySQL 5.7。 解决方案 为了使…

深度学习 -- 卷积神经网络

1、卷积神经网络的结构 大卫休伯尔( David Hunter Hubel ) 等人研究发现&#xff0c;猫的视皮层上 存在简单细胞( simple cell )和复杂细胞( complex cell )&#xff0c;简单细胞会对 感受野中特定朝向的线段做出反应&#xff0c;而复杂细胞对于特定朝向的钱段移动也能做出反应…

伪原创API,批量创作伪原创文章

内容创作已经成为互联网领域中不可或缺的一环。越来越多的内容创作者和网站管理员开始寻找更高效的伪原创工具&#xff0c;以确保其内容的独特性。 百度文心一言API 我们来了解一下百度文心一言API。作为百度文心推出的一项人工智能服务&#xff0c;通过自然语言处理技术&…