首页 > 编程语言 >Halcon 5分钟学会9点标定 带图片示例、示例源码

Halcon 5分钟学会9点标定 带图片示例、示例源码

时间:2023-12-25 21:05:45浏览次数:36  
标签:Index 个点 示例 世界坐标 Halcon 源码 坐标 circle 图片


9点标定应用流程

如果没有9个点,其实只需要一个点就可以,移动机械手,只需将这个点在视野内不同坐标即可,

前置条件,相机焦距,视野固定高度和角度,光源光强度固定。

  1. 移动机械手,使用螺丝批头,在视野范围内的白纸上,点九个点,记录每个点位的位置,每个点位的顺序要和图像上获取的圆心数组顺序一致,此时得到9个点的世界坐标,x和y
  2. 个点分别的世界坐标记录完成后,机械手返回拍照位置。将步骤1中,9个点图片拍摄下来,并记录整张图片(含有9个点)时的世界坐标。记录整张图片(含有9个点)拍照坐标的原因:实际批头坐标与拍照相机坐标位置有误差,后续算出偏移后,还要减去拍照坐标与批头坐标的偏移,才得出最终位置
  3. Halcon 导入图片,对图片进行操作
  • 灰度化
  • 灰度筛选
  • 填充圆中缺失
  • 开操作,将圆形分离出来
  • 根据类圆特征获取圆形
  • 对获取到的每个圆形进行获取其最小外接圆,生成圆心坐标和半径
  1. 已知机械(世界坐标)和图片上的点位(像素坐标),根据公式得出偏移对象
  2. 后续根据实际图片中定位的目标像素坐标,和偏移图像,即可换算出机械手应该移动的实际机械坐标。

示例图片

Halcon 5分钟学会9点标定 带图片示例、示例源码_ci

dev_set_color('red')
read_image (Image, 'O:/草稿/test.jpg')

rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 13, 71)

*填充缺失
fill_up_shape (Regions, WiresFilled, 'area', 1, 100)

*开操作 腐蚀和膨胀的结合,即先腐蚀后膨胀
opening_circle (WiresFilled, Balls, 15.5)

connection (Balls, SingleBalls)

*找到具有目标特征的形状,这边填写的参数是 ‘circularity’ ,就是类圆的图形;
select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)

*确定这些圆形区域的最小外接圆,并将输出的坐标和半径做处理后输出
smallest_circle (SingleBalls, Row, Column, Radius)

*生成 虚拟机械坐标 行往下偏移80
WorldRow := []
WorldCol :=[]

for Index := 0 to |Row|-1 by 1
    WorldRow[Index] := Row[Index]+80
    WorldCol[Index] := Column[Index]
    gen_circle (Circle, WorldRow[Index], WorldCol[Index], 10)
endfor

*生成标定
vector_to_hom_mat2d (Row, Column, WorldRow, WorldCol, HomMat2D1)

*设置目标机械坐标
gen_circle (Circle, 20, 100, 10)

*坐标转换  (Row3,Column3)像素坐标点位, (Qx,Qy)转换后的世界坐标
affine_trans_point_2d (HomMat2D1, 20, 100, Qx, Qy)

dev_set_color('green')
gen_circle (Circle, Qx, Qy, 10)

结果,红色大圆圈为像素坐标,红色小圆圈为机械坐标位置,绿色为目标实际机械坐标位置

Halcon 5分钟学会9点标定 带图片示例、示例源码_计算机视觉_02


标签:Index,个点,示例,世界坐标,Halcon,源码,坐标,circle,图片
From: https://blog.51cto.com/u_14910409/8972134

相关文章

  • C# IOC注入示例
    文章目录主函数`常规注入``属性注入``方法注入`主函数usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingUnity;namespaceIOCTest{internalclassProgram{staticvoidMain(......
  • 数据库 Mysql 多表查询,left join联合两个sql示例
    SELECTt1.RowID,t1.UserID,t1.CreateDate,t1.BatchState,t2.InputDataCount,t1.QtyFROM(SELECT@curRow:=@curRow+1ASRowID,`UserID`,DATE_FORMAT(CreateDate,'%Y-%m-%d')ASCreateDate,......
  • JavaScript读写FM1208 CPU卡源码
    本示例使用的发卡器:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv=&quo......
  • JavaScript读写15693 ICod2 卡源码
    本示例使用设备:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="......
  • LIMS源码,规范样品化验分析的工作流程,对样品分析的环节进行监控和管理
    LIMS将样品管理、数据管理、资源管理、业务管理、报告管理等功能融为一体,组成一套完整的实验室综合管理和产品质量监控体系。其核心是规范样品化验分析的工作流程,对样品分析的每一个环节进行监控和管理,在提高样品分析质量和人员工作效率的同时,帮助实验室建立起一套完善的质量保证体......
  • 【flink番外篇】5、flink的window(介绍、分类、函数及Tumbling、Sliding、session窗口
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • 同城代厨做饭预约到家做饭做菜系统家宴app源码厨师入住+厨师端源码
    技术栈:thinkphp+vue后端、uniapp用户端+uniapp厨师端、mysql数据库预约厨师上门做饭系统·常用功能1、预约私厨2、查看订单3、服务评价4、在线支付预约厨师做菜系统·产品优势1、多种行业适配适用多种行业、不同场景。“不止做饭”:系统模式也支持其他类型的同城O2O行业进行管理,......
  • halcon-轮廓拟合圆fit_circle_contour_xld
    fit_circle_contour_xld(xld,'algebraic',-1,0,0,3,2,Row,Column,Radius,StartPhi,EndPhi,PointOrder)*对XLD轮廓做近似圆计算--拟合圆--获得圆数据*参数1:输入xld轮廓*参数2:圆的拟合算法*'ahuber'对轮廓点进行加权,以减少异常值的影响*'......
  • 利用Prompt学习更多示例,提高大模型性能
    随着人工智能技术的不断发展,大型语言模型(如GPT-3、BERT等)在自然语言处理领域的应用越来越广泛。然而,这些模型通常需要大量的训练数据才能达到较高的性能。为了解决这个问题,一种有效的方法是使用prompt学习,即通过向模型提供示例来引导其生成输出。在prompt学习中,关键在于如何选择和......
  • FineReport 11.0参数查询入门示例操作记录
    参数的主要作用是实现用户与数据的实时交互,即进行数据的过滤。我们可以在很多情况下使用参数,比如在单元格中引用参数来实现动态标题、根据参数值的不同显示不同值等等。如下图所示:links:https://help.fanruan.com/finereport/doc-view-166.html?source=0&from=base......