Halcon 机器视觉案例 之 药剂液面高度测量

第二篇 机器视觉案例 之 药剂液面高度测量

文章目录

  • 第二篇 机器视觉案例 之 药剂液面高度测量
    • 1.案例要求
    • 2.实现思路
      • 2.1获得液面的位置:
        • 2.1.1 获得每支药剂的位置坐标
        • 2.1.2 根据药剂的横坐标设置卡尺工具助手找到每一个液面的位置
      • 2.2 获得基准线的位置:
      • 2.3 导入点与线测得距离
      • 2.4 显示测量结果
    • 3.实现效果
    • 4. 算子
    • 拓展

1.案例要求

在这里插入图片描述

  • 测量每一支药剂的液面高度

2.实现思路

  • 测量液面高度需要获得药剂液面的位置与一条基准线,通过测量点到线距离公式可以测得液面的高度

2.1获得液面的位置:

2.1.1 获得每支药剂的位置坐标
  • 对图像进行预处理操作,使得液面的特征更加明显,便于模板查找、

    • 均衡操作可以增加图像的对比度,使图像的柱状线性化
    • 使用算子 equ_histo_image (Image, ImageEquHisto)
    • 均衡后的图像: 在这里插入图片描述
  • 画一个区域并根据区域创建模板

    • 创建区域
      • gen_rectangle1 (Rectangle, 218, 281, 312, 328)
    • 裁剪区域
      • reduce_domain (ImageEquHisto, Rectangle, ImageReduced)
    • 创建模板
      • create_shape_model (ImageReduced, 'auto', rad(-45), rad(45), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
  • 查找模板并获得模板结果,在模板结果中获取匹配个数以及坐标

    • 查找模板
      • find_shape_model (ImageEquHisto1, ModelID, rad(-45), rad(40), 0.5, 0, 0.5, ‘least_squares’, 0, 0.9, Row, Column, Angle, Score)
    • 获得模板匹配结果
      • dev_display_shape_matching_results (ModelID, ‘red’, Row, Column, Angle, 1, 1, 0)
        tuple_length (Row, Length)
    • 获得匹配个数(根据坐标数组长度)
      • tuple_length (Row, Length)
2.1.2 根据药剂的横坐标设置卡尺工具助手找到每一个液面的位置
  • 创建一个卡尺助手
    在这里插入图片描述
  • 画线 —— 给卡尺设置长度
    在这里插入图片描述
  • 设置边缘幅度
    在这里插入图片描述
  • 设置卡尺的参数
    在这里插入图片描述
    在这里插入图片描述
  • 插入代码
    在这里插入图片描述
  • 设置卡尺的横坐标
    在这里插入图片描述
  • 卡尺检测结果
    • measure_pos (Image, MsrHandle_Measure_02_0, 1, AmplitudeThreshold, 'all', 'first', Row_Measure_02_0, Column_Measure_02_0, Amplitude_Measure_02_0, Distance_Measure_02_0)
    • 获得液面坐标
    • (Row_Measure_02_0, Column_Measure_02_0)

2.2 获得基准线的位置:

  • 画线算子
    • draw_line (WindowHandle, Row1, Column1, Row2, Column2)
    • 获得坐标后设置固定值
      • gen_region_line (RegionLines, 301, -4.5, 297, 632.5)

2.3 导入点与线测得距离

  • distance_pl (Row_Measure_02_0, Column_Measure_02_0, 301, -4.5, 297, 632.5, Distance)

2.4 显示测量结果

  • 将每一个药剂测量的结果与坐标拼接成数组
    • tuple_concat (distances, distance, distances)
    • tuple_concat (rows, Row_Measure_02_0-10, rows)
    • tuple_concat (columns, Column_Measure_02_0-30, columns)
  • 设置字体格式以及输出字
    • set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
    • disp_message (WindowHandle, distances, 'window',rows, columns, 'red', 'false')

3.实现效果

在这里插入图片描述

4. 算子

  • 创建一个匹配轮廓模型
    • create_shape_model(Template::NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast,MinContrast:ModelID)
    • 参数
      • Template:输入的图像模板名称; 用来产生模型的图像;
      • NumLevels:最大的金字塔(分析法)层数,
      • AngleExtent:输入匹配时的角度范围;
      • AngleStep:输入匹配旋转角度的步长
      • Optimization:设置模板优化和模板创建方法
      • Metric:设置匹配方法
      • Contras:设置对比度
      • MinContrast:输入图像中匹配物体的最小差别(对比度)
      • ModelID:输出模型句柄;
  • 在一个图像中找出一个最佳匹配轮廓
    • find_shape_model(Image::ModelID, AngleStart, AngleExtent,MinScore, NumMatches, MaxOverlap, SubPixel,NumLevels, Greediness: Row, Column, Angle, Score)
    • 参数
      • Image:输入匹配模型的图像 (byte/uint2) ;
      • ModelID:输入模型句柄;
      • AngleStart:输入匹配时的起始角度;
      • AngleExtent:输入匹配时的角度范围;
      • MinScore:输入最小的匹配值(匹配质量) , 考虑到模板的一半被遮挡, 默认0.5
      • NumMatches:在图像上找到模板的最大个数,默认1个
      • MaxOverlap :定义了找到的两个目标区域最多重叠的系数
      • MaxOverla p=1, 所有找到的目标区域都要返回。
      • SubPixel :确定找到的目标是否使用亚像素精度提取
      • NumLevels:搜索时使用的金字塔层数
      • Greediness 搜索时的“贪婪程度
      • Row:输出目标外形轮廓的y值坐标(轮廓中心位置) ;
      • Column:输出目标外形轮廓的x坐标(轮廓中心位置) ;
      • Angle:输出目标物体模型旋转后对应的角度;
      • ScaleR:输出y值方向的比例大小;
      • ScaleC:输出x值方向的比例大小;
      • Score:输出目标物体的匹配值;
  • 均衡图像,图像的柱状线性化
    • equ_histo_image(Image:ImageEquHisto:😃
    • 参数:
      • Image :输入多通道图像 (byte/uint2);
      • ImageEquHisto: 输出图像的柱状线性化图像 (byte/uint2);
  • 合并两个元组
    • tuple_concat(::T1, T2: Concat)
    • 参数
      • T1:输入元组1;
      • T2:输入元组2;
      • Concat:合并两个元组为1个新元组;

拓展

  • 本案例还可以使用VisionPro完成,参考文章:VisionPro 机器视觉案例 之 药剂液面高度检测
  • 区别在于VisonPro的控件可视化程度更高,Halcon的算子更快捷,可以两篇文章对比学习

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用k6进行MongoDB负载测试

1.安装环境 安装xk6-mongo扩展 ./xk6 build --with github.com/itsparser/xk6-mongo 2.安装MongoDB 参考Docker安装MongoDB服务-CSDN博客 连接成功后新建test数据库和sample集合 3.编写脚本 test_mongo.js import xk6_mongo from k6/x/mongo;const client xk6_mongo.new…

LabVIEW随机扫描成像系统

利用LabVIEW开发了一套随机扫描成像系统,利用硬件时钟实现声光偏转器(AOD)的频率控制与信号采集之间的高速时间同步。系统利用了高精度的时钟同步技术,确保了成像精度和重复性,从而有效提高了成像速度和质量。 项目背景…

29. 多线程编程

一、什么是线程 线程(thread)它们是同一个进程下执行的,并共享相同的下上文。线程包括开始、执行顺序和结束三部分。它有一个指令指针,用于记录当前运行的上下文。当其它线程运行时,它可以被抢占(中断&…

精准采集整车信号:风丘混合动力汽车工况测试

一 背景 混合动力汽车是介于纯电动汽车与燃油汽车两者之间的一种新能源汽车。它既包含纯电动汽车无污染、启动快的优势,又拥有燃油车续航便捷、不受电池容量限制的特点。在当前环境下,混合动力汽车比纯电动汽车更符合目前的市场需求。 然而&#xff0c…

《军工记忆》第二季播出,科技创新铸国之重器

2019年8月1日晚20点,《军工记忆》第二季在央视纪录频道(CCTV-9)播出,第一集《第一颗氢弹》首当其冲,为我们生动描绘了氢弹研制过程的艰难岁月,重现中国军工事业的漫漫长路,科技创新铸国之重器。…

QT5.9.9+ARM交叉编译开发环境搭建【详细步骤】

文章目录 1.前言2.Linaro编译器下载2.qt-everywhere编译安装3.Linux下QT Creator安装4.交叉编译环境配置5.QTARM程序打包参考文献 1.前言 本文将以32位的ARM开发板为例,搭建基于Ubuntu 16.04虚拟机的QTARM开发环境,使用的软件如下: 序号软件…

深入解析 StarRocks 物化视图:全方位的查询改写机制

小编导读: 本文将重点介绍如何利用物化视图进行查询改写。文章将全面介绍物化视图的基本原理、关键特性、应用案例、使用场景、代码细节以及主流大数据产品的物化视图改写能力对比。 物化视图在 StarRocks 中扮演着至关重要的角色,它是进行数据建模和加速…

挑战一个月基本掌握C++(第五天)了解运算符,循环,判断

一 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 1.1 算术运算符 假设变量 A 的值为 10,变量 B 的值为…

通过阿里云 Milvus 与 PAI 搭建高效的检索增强对话系统

背景介绍 阿里云向量检索服务Milvus版(简称阿里云Milvus)是一款云上全托管服务,确保了了与开源Milvus的100%兼容性,并支持无缝迁移。在开源版本的基础上增强了可扩展性,能提供大规模 AI 向量数据的相似性检索服务。相…

jQuery总结(思维导图+二维表+问题)

关于什么是jQuery:(下面是菜鸟里的介绍) jQuery 是一个 JavaScript 库。 jQuery 极大地简化了 JavaScript 编程。 jQuery 很容易学习。 而jQuery对我的感受就是,链式运用的很形象,隐式迭代还有一些兼容性强的优点&…

(14)CT137A- 动态数码管设计

(1)了解板卡原理图中数码管的特性:共阳极数码管,公共端连接了电源,FPGA IO口低电平有效,另外,可以看到位选端FPGA位选低电平时选通。 (2)刷新时间的设定:众所…

UG NX二次开发(C#)-如何设置UGOpen的UF_CAM_geom_type_e枚举类型

文章目录 1、前言2、UF_CAM_geom_type_e类型说明3、在C#的类型1、前言 UG NX二次开发提供的帮助文档,无论是c/c++、C#、Python、VB语言,其采用UFun函数时都是参考的UGOpen的帮助文档,即是:UGOPEN函数参考手册(nx6).CHM,后续的都没有怎么增加,这个在哪个版本中都适用。但…

内容与资讯API优质清单

作为开发者,拥有一套API合集是必不可少的。这个开发者必备的API合集汇集了各种实用的API资源,为你的开发工作提供了强大的支持!无论你是在构建网站、开发应用还是进行数据分析,这个合集都能满足你的需求。你可以通过这些免费API获…

vue使用v-if和:class完成条件渲染

1.使用v-if 和v-else 完成主body和暂无数据两个<tbody>标签的条件渲染(注意与v-show效果的区别) 2.v-for完成列表渲染 3.:class完成分数标红的条件控制 删哪个就传哪个的id&#xff0c;基于这个id去过滤掉相同id的项&#xff0c;把剩下的项返回 <td><a click.p…

C++ OpenGL学习笔记(2、绘制橙色三角形绘制、绿色随时间变化的三角形绘制)

相关文章链接 C OpenGL学习笔记&#xff08;1、Hello World空窗口程序&#xff09; 目录 绘制橙色三角形绘制1、主要修改内容有&#xff1a;1.1、在主程序的基础上增加如下3个函数1.2、另外在主程序外面新增3个全局变量1.3、编写两个shader程序文件 2、initModel()函数3、initS…

vue基础作业实验十

vue基础作业实验十 实验要求案例要点&#xff1a;代码以及思考style部分Vue.js 部分Vue 实例部分 这段代码是一个基于 Vue.js 的静态页面&#xff0c;功能包括商品品牌的添加、删除和搜索。 实验要求 一、实验的基本内容 &#xff08;1&#xff09;Vue模板语法。 &#xff08…

PHP+MySQL 学生信息管理系统

目录 MySQL建表指令 主页面展示 主页面源代码如下 增&#xff1a;添加学生信息 添加html如下 html&#xff1a;主要用于显示网页内容 成功添加后回显 ​编辑 增加php如下 删&#xff1a;删除学生信息 删除html如下 成功删除后回显 删除php如下 改&#xff1a;修改学…

QT网络(四):HTTP通信

Qt 网络模块提供一些类来实现 OSI 七层网络模型中高层的网络协议&#xff0c;如 HTTP、FTP、SNMP 等&#xff0c;这些类主要是 QNetworkRequest、QNetworkAccessManager 和 QNetworkReply。QNetworkRequest 类 通过 URL 发起网络协议请求&#xff0c;其也保存网络请求的信息&a…

Pytorch | 从零构建Vgg对CIFAR10进行分类

Pytorch | 从零构建Vgg对CIFAR10进行分类 CIFAR10数据集Vgg网络结构特点性能应用影响 Vgg结构代码详解结构代码代码详解特征提取层 _make_layers前向传播 forward 训练过程和测试结果代码汇总vgg.pytrain.pytest.py 前面文章我们构建了AlexNet对CIFAR10进行分类&#xff1a; Py…

将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?

随着科技的飞速发展&#xff0c;4G太阳能无线监控系统以其独特的优势在远程监控领域脱颖而出。这种系统结合了太阳能供电的环保特性和4G无线传输的便捷性&#xff0c;为各种环境尤其是无电或电网不稳定的地区提供了一种高效、可靠的视频监控解决方案。将这些视频流接入大屏显示…