Halcon 检测物体定位点

文章目录

  • get_domain 返回所有输入图像的定义域作为一个区域
  • add_channels 给区域增加灰度值
  • find_shape_model 发现匹配模板
  • find_shape_models 发现最佳模板
  • 示例

get_domain 返回所有输入图像的定义域作为一个区域

Halcon 中的区域

get_domain(Image : Domain : : )
Image :  图像 (input_object): 类型可以是 (多通道-) 图像数组,对象类型为字节、方向、循环、int1、int2、uint2、int4、int8、实数、复数或矢量场。这是输入图像。Domain :(output_object): 类型是区域数组,对象类型。这是输入图像的定义域。

add_channels 给区域增加灰度值

add_channels(Regions, Image : GrayRegions : : )
region(-array) → object: 这个参数是指输入的区域,通常是一个数组,描述了图像中的某些区域,但不包含像素值。
Image (input_object) (multichannel-)image → object: 这个参数是指包含像素值的输入图像,可能是多通道图像。
GrayRegions (output_object) image(-array) → object: 这个参数表示输出的图像或图像数组,其中包含了具有像素值的区域,每个输入区域对应一个输出图像。

find_shape_model 发现匹配模板

find_shape_model(Image : :  //搜索图像ModelID, //模板句柄AngleStart,  // 搜索时的起始角度AngleExtent, //搜索时的角度范围,必须与创建模板时的有交集MinScore, //最小匹配值,输出的匹配的得分Score 大于该值NumMatches, //定义要输出的匹配的最大个数MaxOverlap, //当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出
//如果MaxOverlap=0, 找到的目标区域不能存在重叠, 如果MaxOverla p=1,所有找到的目标区域都要返回。SubPixel, //计算精度的设置,五种模式,多选2,3NumLevels, //搜索时金字塔的层数Greediness : //贪婪度,搜索启发式,一般都设为0.9,越高速度快,容易出现找不到的情况//0安全慢;1块不稳定;其他就是介于中间值 Row,Column, Angle, Score) //输出匹配位置的行和列坐标、角度、得分。

find_shape_models 发现最佳模板

find_shape_models(Image : : ModelIDs, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score, Model)Image (input_object):这个参数表示输入图像数据,这可能是多通道图像数组,用于在其中找到模型。ModelIDs (input_control):这是模板或模型的ID数组,用于指定哪一个或多个模型将在图像中寻找。AngleStart (input_control):指定模型可能的最小旋转角度,单位是弧度。例如,-0.39弧度表示模型可能有一些初始旋转。AngleExtent (input_control):模型的旋转角度范围,单位为弧度。例如,0.79弧度表示可以允许模型在指定角度范围内旋转。MinScore (input_control):找到模型实例的最小评分标准。01之间的值,表示匹配得分的下限。NumMatches (input_control):要找到的模型实例的数量。如果为0,表示找出所有匹配的实例。MaxOverlap (input_control):指定模型实例之间的最大重叠程度。值在01之间,表示允许多大程度的重叠。SubPixel (input_control):选择是否使用子像素精度进行计算。如果不等于 'none',表示使用特定的子像素方法。NumLevels (input_control):用于匹配时的金字塔层级数量。更多的层级可能提供更快的匹配,但可能牺牲准确性。Greediness (input_control):搜索算法的“贪心度”。0表示安全但慢,1表示快速但可能错过匹配。值在01之间。Row (output_control)Column (output_control):找到的模型实例的行坐标和列坐标。Angle (output_control):找到的模型实例的旋转角度。Score (output_control):找到的模型实例的匹配得分。Model (output_control):找到的模型实例的索引。

示例

* This example program checks the right position of a label on
* a shampoo bottle.
* First, two shape models for the bottle and the label are created.
* Then, the models are searched in a sequence of images,
* and it is checked, if their relative position is within the
* specified tolerances.
* 
* init visualization
dev_update_off ()
dev_set_draw ('margin')
dev_set_line_width (2)
* 
* load reference image for model preparation
* 0.读取图片
set_system ('clip_region', 'false')
read_image (Image, 'packaging/shampoo_01')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_display (Image)
* 
* prepare the shape model for matching
* 
* generate first model region and search ROI
* 1.产生第一个感兴趣的区域
BottleModelRow := 131
BottleModelColumn := 370
BottleModelLength1 := 350
BottleModelLength2 := 35
BottleModelPhi := -0.1093
* 绘制矩形
gen_rectangle2 (Rectangle1, BottleModelRow, BottleModelColumn, BottleModelPhi, BottleModelLength1, BottleModelLength2)
gen_rectangle2 (Rectangle2, BottleModelRow + 220, BottleModelColumn, -BottleModelPhi, BottleModelLength1, BottleModelLength2)
* 将矩形联合
union2 (Rectangle1, Rectangle2, TemplateBottleRegion)
* 获取整个图像的区域
get_domain (Image, Domain)
* 计算区域的交集
intersection (TemplateBottleRegion, Domain, TemplateBottleRegion)
* 获取相交的中心点区域和坐标
area_center (TemplateBottleRegion, Area, RowBottleRef, ColumnBottleRef)
* 产生一个圆
gen_circle (SearchROIBottle, RowBottleRef, ColumnBottleRef, 40)
* 将感兴趣的区域裁剪
reduce_domain (Image, TemplateBottleRegion, ImageReduced)
* 
* create shape model
* 2.创建形状匹配模型 ModelIDBottle
create_shape_model (ImageReduced, 5, -rad(3), rad(6), 0, 'auto', 'use_polarity', 25, 3, ModelIDBottle)
* 
* display shape model
dev_display (Image)
dev_set_color ('forest green')
dev_display (TemplateBottleRegion)
dev_set_color ('slate blue')
disp_message (WindowHandle, 'bottle shape model', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 
* generate second model region and search ROI
* 3.产生第二个感兴趣的区域
LabelRow1 := 180
LabelRow2 := 310
LabelColumn1 := 50
LabelColumn2 := 470
* 产生一个矩形
gen_rectangle1 (TemplateLabelRegion, LabelRow1, LabelColumn1, LabelRow2, LabelColumn2)
* 获取区域的中心点以及坐标
area_center (TemplateLabelRegion, Area1, RowLabelRef, ColumnLabelRef)
* 产生一个圆
gen_circle (SearchROILabel, RowLabelRef, ColumnLabelRef, 60)
* 将感兴趣的区域裁剪
reduce_domain (Image, TemplateLabelRegion, ImageReduced)
* 4.检查已创建的形状模型并获得其属性信息
inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 1, 25)
* 
* create shape model
* 创建模板 ModelIDLabel1
create_shape_model (ImageReduced, 5, rad(-3), rad(6), 0, 'auto', 'use_polarity', 25, 5, ModelIDLabel1)
* 将匹配模板选择180度创建模板 ModelIDLabel2
create_shape_model (ImageReduced, 5, rad(180 - 3), rad(6), 0, 'auto', 'use_polarity', 25, 5, ModelIDLabel2)
ModelIDsLabel := [ModelIDLabel1,ModelIDLabel2]
* 
* display label model
dev_display (Image)
dev_set_color ('forest green')
dev_display (TemplateLabelRegion)
dev_set_color ('slate blue')
dev_display (ModelRegions)
disp_message (WindowHandle, 'create label shape model', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 
* MainLoop
* 
* check relative positions of label and bottle in all images
* 5.检测位置
for Index := 1 to 13 by 1read_image (Image, 'packaging/shampoo_' + Index$'.2')dev_display (Image)disp_message (WindowHandle, 'check label position', 'window', 12, 12, 'black', 'true')count_seconds (s1)* 裁剪第一次的搜索圆reduce_domain (Image, SearchROIBottle, ImageReduced)* 通过ModelIDBottle寻找搜索圆,获取ScoreBottlefind_shape_model (ImageReduced, ModelIDBottle, -rad(3), rad(6), 0.7, 1, 0.5, 'least_squares', 0, 0.9, RowBottle, ColumnBottle, AngleBottle, ScoreBottle)* prepare search ROIs in search image* 将两个搜索标记合并concat_obj (SearchROILabel, SearchROILabel, SearchROIs)add_channels (SearchROIs, Image, GrayRegions)* * search shape models* 通过ModelIDsLabel 查找匹配模板获取Score得分,注意角度范围,并且获取FoundModelfind_shape_models (GrayRegions, ModelIDsLabel, [rad(-3),rad(180 - 3)], [rad(6),rad(6)], 0.6, 1, 1, 'interpolation', 0, 0.9, Row, Column, Angle, Score, FoundModel)count_seconds (s2)if (|Score| != 1 or |ScoreBottle| != 1)disp_message (WindowHandle, 'Model not found', 'window', 40, 12, 'red', 'true')else* 如果模板if (ModelIDsLabel[FoundModel] == ModelIDLabel2)* 显示图标选择 180°disp_message (WindowHandle, 'Label rotated by 180°', 'window', 40, 12, 'red', 'true')else* calculate y deviation* 计算y的偏移量Diffy := (RowBottle - Row) - (RowBottleRef - RowLabelRef)* calculate x deviation* 计算x的偏移量Diffx := (ColumnBottle - Column) - (ColumnBottleRef - ColumnLabelRef)* *  check the rotation angle of the bottle label* 计算旋转角度Diffa := deg(AngleBottle - Angle)* * calculate the time elapsedTime := s2 - s1* * display results* 显示结果Color := 'black'ModelColor := 'forest green'if (abs(Diffx) > 3)Color := [Color,'red']ModelColor := 'red'elseColor := [Color,'forest green']endifif (abs(Diffy) > 1)Color := [Color,'red']ModelColor := 'red'elseColor := [Color,'forest green']endifif (abs(Diffa) > 1)Color := [Color,'red']ModelColor := 'red'elseColor := [Color,'forest green']endif* 显示匹配结果dev_display_shape_matching_results (ModelIDsLabel, ['slate blue',ModelColor], Row, Column, Angle, 1, 1, FoundModel)* 提示消息disp_message (WindowHandle, ['Time       = ' + (Time * 1000)$' .2' + ' ms','Diff x     = ' + Diffx$' .2','Diff y     = ' + Diffy$' .2','Diff angle = ' + Diffa$' .2'], 'window', 35, 12, Color, 'true')endif* endifif (Index < 13)disp_continue_message (WindowHandle, 'black', 'true')stop ()elsedisp_message (WindowHandle, 'Program finished', 'window', 450, 430, Color, 'true')endif
endfor
stop ()
clear_shape_model (ModelIDLabel1)
clear_shape_model (ModelIDLabel2)
clear_shape_model (ModelIDBottle)
set_system ('clip_region', 'true')

在这里插入图片描述

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

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

相关文章

SpringBoot之自定义注解参数校验

SpringBoot之自定义注解参数校验 为什么要自定义注解 我这里先引入一个例子&#xff0c;就比如我现在要写文章&#xff0c;文章也许写完正要发布&#xff0c;也可以是还没写完正要存草稿&#xff0c;前端往后端发送数据&#xff0c;如果前端的state不是草稿或者已发布状态&…

大模型应用开发极简入门

简单的归纳一下书的前序部分 目录 LLM&#xff08;Large Language Model&#xff09;的应用技术栈通常包括以下几个方面&#xff1a; 深度学习框架&#xff1a; 数据预处理工具&#xff1a; 训练资源&#xff1a; 模型优化和调参工具&#xff1a; 部署和应用集成&#xf…

智慧图书管理|基于SSM+vue的网上服装商城系统(源码+数据库+文档)

智慧图书管理目录 基于SSMvue的网上服装商城系统 一、前言 二、系统设计 三、系统功能设计 1.1 服装列表 1.2 公告信息管理 1.3 公告类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1…

linus下Anaconda创建虚拟环境pytorch

一、虚拟环境 1.创建 输入下面命令 conda create -n env_name python3.8 输入y 2.激活环境 输入 conda activate env_name 二、一些常用的命令 在Linux的控制平台 切换到当前的文件夹 cd /根目录/次目录 查看conda目录 conda list 查看pip目录 pip list查看历史命…

Python 爬虫如何配置代理 IP (Py 采集)

在Python中配置代理IP&#xff0c;可以通过设置requests库的proxies参数来实现。以下是一个示例&#xff1a; import requests# 则立可以获取稳定代理Ip&#xff1a;https://www.kuaidaili.com/?refrg3jlsko0ymg # 推荐使用私密动态 IP proxies {"http": "ht…

芒果超媒财报解读:科技加持下,如何蜕变为内容“全科生”?

在降本增效和内容为王的基调下&#xff0c;国内头部长视频平台正在拥抱增长。 爱奇艺率先公布2023年财务数据&#xff0c;实现归母净利润19.25亿元&#xff0c;与2022年亏损1.36亿元相比&#xff0c;扭亏为盈且增幅显著。 而近日&#xff0c;随着新一季《浪姐》播出&#xff…

JAVA面试题分享---多线程与线程池

多线程 什么是线程?线程和进程的区别?&#xff08;了解&#xff09; 线程&#xff1a;是进程的一个实体&#xff0c;是 cpu 调度和分派的基本单位&#xff0c;是比进程更小的 可以独立运行的基本单位。 进程&#xff1a;具有一定独立功能的程序关于某个数据集合上的一次运…

【漏洞复现】IP-guard WebServer 权限绕过漏洞

0x01 产品简介 IP-guard WebServer 是 IP-guard 网络安全管理系统的一部分,用于提供 Web 界面以进行用户权限管理、监控和审计。 0x02 漏洞概述 IP-guard WebServer的权限验证机制中存在设计缺陷,未授权的攻击者能够规避安全验证,通过后端接口执行文件的任意读取和删除操…

DaVinci Resolve Studio 19(达芬奇19调色剪辑)win/mac激活版

DaVinci Resolve Studio是一个结合专业的8k 编辑&#xff0c;颜色混合&#xff0c;视觉效果和音频后期制作的软件。只需点击一下&#xff0c;你就可以立即在编辑、混音、特效和音频流之间切换。此外&#xff0c;达芬奇解决(达芬奇)是一个多用户协作的解决方案&#xff0c;使编辑…

一单利润100+,不起眼的小生意,却能闷声发财!

今天&#xff0c;我想向大家介绍一个看似不太热门&#xff0c;但实际上需求很高的项目——酒店代订。这个项目其实很早以前就已经有人开始尝试了&#xff0c;但可能并没有被大众所熟知。简而言之&#xff0c;酒店代订就是帮助他人通过我们来预订他们想要入住的酒店。 当客户将…

管理能力学习笔记八:Will-Skill矩阵“盘“团队

如何把握带教中的“度”&#xff0c;才能在把事情做好的基础上&#xff0c;又能使员工获得成长呢&#xff1f; 需要做到 合理授权 & 适当辅导 如何做到&#xff1f; 通过使用 意愿-技能矩阵(Will-Skill Matrix) 辨别不同带教方法的适用情形&#xff0c;"盘"…

ElasticSearch总结1

目录 一、ElasticSearch介绍&#xff1a; 举例一&#xff1a; 举例二&#xff1a; 举例三&#xff1a; 二、ELK技术栈 三、Elasticsearch 的基本概念&#xff1a; 四、正向索引和倒排索引&#xff1a; 正向索引&#xff1a; 倒排索引&#xff1a; 五、Mysql和Elastics…

新版本Qt Creator安装配置

新版本Qt Creator安装配置 文章目录 新版本Qt Creator安装配置1、前言2、环境3、安装配置4、总结 更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;Qt开发经验 &#x1f448; 1、前言 Qt是一个跨平台的C应用程序开发框架&#xff0c;而Qt Creator是专为Q…

免费的单片机物联网MQTT平台选择

目的是多设备接入中控&#xff0c;平台只做转发。 选择巴法云&#xff1a;巴法科技&巴法云-巴法设备云-巴法物联网云平台 clientId是私钥uid&#xff1a; 多设备 clientId 填同一个 uid 都是可以的。平台应该是加了后缀区分。 支持自定义topic&#xff0c;操作简单&#x…

Spring ai 快速入门及使用,构建你自己的ai

第一步&#xff1a;创建springboot项目 jdk必须是17及以上 1.8用不了 第二步 选择web和ai的依赖 选择openai 第三步 需要配置openai key 配置 分享个免费或的apikey的地方New API 会免费赠送1刀的token spring.application.namespringAI spring.ai.openai.base-urlhttps://ap…

esp32学习

开启自动补全功能 Arduino IDE 2.0开启代码补全及修改中文_arduino ide怎么设置中文-CSDN博客 PWM 、 ADC转换 在使用这个adc默认配置的时候adc引脚的输入电压必须是介于0-1之间&#xff0c;如何高于1v的电压都会视为一个最高值&#xff0c;如果要增加测量电压你就需要配置一…

Flexible布局在Web前端开发中的实际应用

随着Web前端技术的不断发展&#xff0c;Flexible布局&#xff08;弹性布局&#xff09;已成为现代网页设计中不可或缺的一部分。它提供了一种高效、灵活的方式来组织和管理页面元素&#xff0c;使开发者能够轻松应对各种复杂的布局需求。本文将通过一个实际的应用案例来介绍Fle…

Protobuf 通信协议

Protobuf Protobuf 简介使用技术内幕 Protobuf 简介 在移动互联网时代&#xff0c;手机流量、电量是最为有限的资源&#xff0c;而移动端的即时通讯应用无疑必须得直面这两点 解决流量过大的基本方法就是使用高度压缩的通信协议&#xff0c;而数据压缩后流量减小带来的自然结…

PyCharm更换pip源、模块安装、PyCharm依赖包导入导出

一、Pycharm更换安装源 在下载安装好Pycharm后&#xff0c;一个在实际编程开发过程中非常重要的问题是第三方库添加&#xff0c;然而Python默认的源网络速度有点慢&#xff0c;因此&#xff0c;我们常常需要做的是更换Pycharm的安装源。 在当前最新版&#xff08;2022.03版&…

C++三大特性及应用

C三大特性 面向对象程序设计&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来设计软件。在OOP中&#xff0c;对象是类的实例&#xff0c;类包含数据&#xff08;属性&#xff09;和可以对数据执行操作的方法&#xff08;行为&#xff09;。 面向对象的…