手机屏幕贴合项目(ni视觉如何找矩形的角坐标)

首先,我们存储了cg和dito感兴趣八个角图像的模板,用来匹配位置。

cover指的是cg的四个角模板,lcm是dito四个角匹配模板。

其次,我们采集的8副图像(m_DlgCCDViewArr[2][4])中一定包含匹配模板的特征。

好,我们分析代码如何找角坐标:

第一,m_DlgCCDViewArr[i][j].MatchImage();在图像中找模板

1,调用ni匹配角度限制:MatchPatternOptions options;
    RotationAngleRange rr[2];
    PointFloat poinf;
    float    angle;    
    float angleRangeMin[2] = { pMainDlg->m_MatchOption.anglelower,0 };
    float angleRangeMax[2] = { pMainDlg->m_MatchOption.angleupper,0 };

for (int i = 0 ; i < 2 ; i++)
    {
        rr[i].lower = angleRangeMin[i];
        rr[i].upper = angleRangeMax[i];
    }

2,ni匹配初始设置:

 options.mode =IMAQ_MATCH_SHIFT_INVARIANT;//尺度不变
 options.minContrast =5;// pMainDlg->m_MatchOption.minContrast;最小对比度
    options.angleRanges=rr;角度范围限制
    options.numRanges = 2;
    options.subpixelAccuracy=FALSE;亚像素
    options.numMatchesRequested = 1;
    options.matchFactor =pMainDlg->m_MatchOption.matchFactor;
    options.minMatchScore =pMainDlg->m_MatchOption.minMatchScore; //800;

3,调用ni图像库匹配:(ni喜欢用imaq开头)

 int numMatches = 0;

    PatternMatch* matchInfo=NULL;
    matchInfo = imaqMatchPattern2(m_imgBase, m_imgTemplate, &options,NULL,IMAQ_NO_RECT, &numMatches);//OK

第二,匹配到后,找直线,应该调用ni图像处理库的抓线卡尺: 

1,   this->SearchGauge();

ni图像处理库,还是很复杂,我们捡重点说(我觉得初学用visionpro比较好): FindStraightEdge2();

IVA_FindStraightEdge2(/*roi*/m_rcCurrAreaX,m_AdvEdgeOptionX,l1st,l1en,l1ang);

IVA_FindStraightEdge2(/*roi*/m_rcCurrAreaY,m_AdvEdgeOptionY,l2st,l2en,l2ang);  

2,     imaqGetIntersection(l1st,l1en,l2en,    l2st,&m_Intersection);找到两条线的十字交叉点,其实模板的样子如下:细节上不同

第三,十字交叉点找到了,要通过标定,把像素坐标变换毫米坐标。

这IVA_FindStraightEdge2函数显然是ni的找直线卡尺了,到此,ni的匹配,ni的找直线,和ni的十字交叉点就解释清楚了。

想一想,如果我们自己不用ni,我们最先能实现的肯定是十字交叉点,再就是找直线,初学,匹配肯定是搞不定的。

实际上,在产品万千次生产重复中,我们其实用不到匹配,因为每次的产品细节上不可能差错,显然,以为找直线卡尺有弹性范围,只用直线卡尺,就能搞定问题。因为机器和产品稳定后,轻易不可能动,这个道理是显而易见的。

图像处理算法千千万,当掉落到现实中,我们可能只用那么一点点,所以所有现实的制约,是极有好处的,在自动化中,我们常常会利用这种制约条件,机器视觉也不例外。(所有的制约如果推翻,我们需要重新制造,我们不生产iphone4了,我们要生产iphone4s,iphone5,但实际仍然走的是这条路,大多数是相似,甚至相同,不需要改变,利用制约,顺其自然,一旦我们走上正轨,很多时候,都是在走重复的路,反复的遵从理想而要去创造历史,大多会失败,因为理想是无条件的,新路都是老路上长出来的,好像有人这么说过!)

所以,学习视觉,先懂那么一点点,日积月累。因为人的欲望会把自己压垮,排的满满的,实际是,大多数情况就像,看守机台,大多数情况不会有问题,没事,去小憩一会,一个人看几十台,没一点问题,人生就是这样,如果你在偷的半日闲中,如果领悟了无上的妙理,诗句,或者一点技术,或者一点勇气,其实这辈子就够用了。

其实人生就开挂了,从零到一,从前笨的自己好像变聪明了。

如果有人天天盯着你做事,或者你不放过自己,偷不了那半日闲(小憩),释然的心态去学习,pay attion to 当下(其实就是机器视觉roi),0到1很难跨过去

但无论何时,人生总会从0到1.

其实从机器视觉到人工智能,实际就是iphone4到iphone14,理解这个东西,我花了近十年时间,因为人工智能出现的很多新名词,你都可以在机器视觉(计算机视觉)中找到原型。

原型,prototype。在生产制造中,你经常会看到。我曾经在富士康看到过这个单词,但当时我不认识!

从理想到原型机,这就是我们的人生!

下一节,我们聊一聊图像封装类,待续

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

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

相关文章

Json与Java类

简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。JSON数据由键值对构成&#xff0c;并以易于阅读的文本形式展现&#xff0c;支持数组、对象、字符串、数字、布尔值…

笔灵AI写作:释放创意,提升写作效率的秘诀

内容为王&#xff0c;在内容创作的世界中尤为重要。然而&#xff0c;面对写作时常常感到无从下手&#xff1a;有时缺乏灵感&#xff0c;有时难以表达清楚自己的想法。AI写作助手的出现&#xff0c;为这些问题提供了创新的解决方案&#xff0c;极大地改变了内容创作的过程。 今…

Pytest+Allure+Yaml+Jenkins+Gitlab接口自动化中Jenkins配置

一、背景 Jenkins&#xff08;本地宿主机搭建&#xff09; 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码&#xff08;可不改&#xff0c;如果运行报allure找不到就直接注释掉&#xff09; …

C++知识点总结 (02):C++中的语句(简单语句、条件语句、迭代语句、跳转语句、异常处理语句、try语句等)

文章目录 1、简单语句(1)空语句(2)复合语句 2、条件语句3、迭代语句(1)常规for循环(2)范围for循环(3)while和do...while 4、跳转语句(1)break(2)continue(3)goto 5、异常处理语句(1)标准异常(2)throw抛出异常 6、try语句 1、简单语句 (1)空语句 ; (2)复合语句 用花括号括起来的…

nginx添加模块

问题描述&#xff1a;已经在运行的宝塔中的nginx如何添加模块 1. 进入宝塔nginx的脚本目录 cd /www/server/panel/install 2. 读修改宝塔官方写的脚本 vim nginx.sh 3. 找到字符 ./configure - 添加模块 --add-module/home/root/app/nginx-module/echo-nginx-module-0.62 …

Linux笔记之Bash脚本中的EOF

Linux笔记之Bash脚本中的EOF code review! 文章目录 Linux笔记之Bash脚本中的EOF基本用法自定义结束符变量替换禁用变量替换用于脚本嵌入重定向到文件与命令组合总结 在 Bash 脚本中&#xff0c; EOF 通常用于定义一个多行字符串或文档块。这种技术被称为“Here Document”&a…

什么是等级保护2.0?

等保的全称是信息安全等级保护&#xff0c;是《网络安全法》规定的必须强制执行的&#xff0c;保障公民、社会、国家利益的重要工作。 官方定义&#xff1a;等级保护是对信息和信息载体按照重要性等级分级别进行保护的一种工作&#xff0c;指对国家重要信息、法人和其他组织及公…

git通过命令方式push代码到远程

本地仓库和远程仓库关联操作 通过关联远程分支可以将本地的分支与远程仓库中的分支进行关联&#xff0c;从而实现本地分支与远程分支的同步和交互。 关联远程分支的步骤如下&#xff1a; 1. 首先&#xff0c;使用git remote -v命令查看当前仓库关联的远程仓库。 git remote …

认识100种电路之放大电路

在电子技术的广袤世界中&#xff0c;放大电路犹如一颗璀璨的明珠&#xff0c;发挥着至关重要的作用。那么&#xff0c;为什么电路需要放大&#xff1f;放大的原理又是什么&#xff1f;实现放大又需要用到哪些元器件以及数量如何呢&#xff1f;接着往下看&#xff0c;会解开你的…

intellij idea中使用R语言plot画图无图像问题

1、在intellij idea中使用R语言plot函数时&#xff0c;会遇到各种各样的问题&#xff0c;会出现图片不显示问题&#xff0c; 可以看到&#xff0c;目前我电脑r语言版本为4.2.1&#xff0c;输入下面代码&#xff1a; # # 安装包 # install.packages(ggplot2) # library(ggplot2…

【Lua】第三篇:基本变量类型介绍

文章目录 一. 变量类型介绍二. 基本知识三. 基本类型介绍1. 空类型&#xff08;nil&#xff09;2. 数值类型&#xff08;number&#xff09;3. 字符串类型&#xff08;string&#xff09;4. 布尔类型&#xff08;boolean&#xff09; 一. 变量类型介绍 Lua中一共有如下8中变量…

Geotools系列说明之JTS空间几何介绍

JTS介绍 The JTS Topology Suite is a Java API that implements a core set of spatial data operations using an explicit precision model and robust geometric algorithms. It provides a complete model for specifying 2-D linear Geometry. Many common operations i…

Qt的入门

Qt的入门 1.Qt的配置2.介绍Qt的使用2.1 Qt 5.14.22.2 Linguist 5.14.22.3Designer 5.14.22.4 Assistant 5.14.22.5 Qt Creator 4.11.1 3.创建第一个项目3.1点击文件来新建一个新的文件或项目3.2选择项目路径和名称3.3选择构建工具3.4类信息3.5翻译文件3.6选择编译器3.7项目管理…

在navicat对mysql声明无符号字段

1.无符号设置 在 MySQL 中&#xff0c;我们可以使用 UNSIGNED 属性来设置列的无符号属性&#xff0c;这意味着该列只能存储非负整数值。对于一些需要存储正整数的列&#xff0c;比如年龄、数量等&#xff0c;使用 UNSIGNED 属性可以提高数据存储和查询的效率&#xff0c;并且能…

智能工业网络,需要何种工业以太网交换机作为支撑?

随着工业企业数字化及信息化的进一步深化升级&#xff0c;工业领域相关控制及信息系统的业务类型不断增加、复杂性不断提升&#xff0c;工业控制网络与工业信息网络也呈现融合趋势&#xff0c;具备支持多业务、多协议、多厂商设备和数据的互联互通、共网承载以及高质量传输能力…

【源码+文档+调试讲解】actual self 服装店的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统服装销售信息管理难度大&#xff0c;容错率低&#xff0c…

VSCode + GDB + J-Link 单片机程序调试实践

VSCode GDB J-Link 单片机程序调试实践 本文介绍如何创建VSCode的调试配置&#xff0c;如何控制调试过程&#xff0c;如何查看修改各种变量。 安装调试插件 在 VSCode 扩展窗口搜索安装 Cortex-Debug插件 创建调试配置 在 Run and Debug 窗口点击 create a launch.json …

【单片机毕业设计11-基于stm32c8t6的智能水质检测】

【单片机毕业设计11-基于stm32c8t6的智能水质检测】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇11基于stm32的智能水质检测系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功能介绍 -------------…

Java----面向对象----总复习

面向对象 面向对象的程序设计思想(Object Oriented Programming),简称OOP.是一种设计者思想.关注的焦点是类,参照现实中的事务,将事务的属性特征,行为抽象出来,用类来表示.代码结构:以类为组织单位,每种事务都有自己的属性和行为,功能, 思想:从宏观上 帮助我们把握,整体分析整…

Bazel plugin for Visual Studio Code

语法突出显示 Bazel Build Targets 树显示工作区中的构建包/目标BUILD 文件中的 CodeLens 链接可通过单击目标直接启动构建或测试Buildifier 集成以检查和格式化您的 Bazel 文件&#xff08;需要安装 Buildifier&#xff09;tasks.json 的 Bazel Task 定义在构建期间调试 .bzl…