仿射变换学习
affine_trans_(iamge,region,xld):仿射变换-作用到iamge,region、xld等都可以
vector_angle_to_rigid():得到一个刚性仿射变换矩阵
orientation_region():得到指定区域的弧度(与x轴正方向的弧度)
hom_mat2d_identity ():得到一个单位矩阵
hom_mat2d_translate ():得到一个平移变换矩阵
hom_mat2d_rotate ():得到一个旋转变换矩阵
hom_mat2d_scale ():得到一个缩放变换矩阵
* 得到充电头区域与x轴正方形的弧度
orientation_region (Regions, Phi)
* 得到充电头的面积和中心点坐标
area_center (Regions, Area, Row, Column)
* 得到一个刚性仿射的变换矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
* 根据旋转的变换矩阵进行仿射变换
affine_trans_region (Regions, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
* 得到一个单位矩阵
hom_mat2d_identity (HomMat2DIdentity)
* 得到一个平移的变换矩阵
hom_mat2d_translate (HomMat2DIdentity, 500, 500, HomMat2DTranslate)
* 得到一个平移加旋转的变换矩阵
hom_mat2d_rotate (HomMat2DTranslate, rad(-90), Column, Row, HomMat2DRotate)
* 得到一个平移、旋转、缩放的变换矩阵
hom_mat2d_scale (HomMat2DRotate, 0.5, 0.5, Column, Row, HomMat2DScale)
* 根据变换矩阵进行仿射变换
affine_trans_region (RegionAffineTrans, RegionAffineTrans1, HomMat2DScale, 'nearest_neighbor')
*对匹配到的中心与模板的中心求取映射关系:仿射变换
vector_angle_to_rigid(Row_model,Column_model,rad(0),Row,Column,Angle,HomMat2D)
*根据映射关系求出模板对应的图像范围
affine_trans_region(ROI_region,RegionAffineTrans,HomMat2D,'nearest_neighbor')
模板匹配
*读取并显示图像;
*确定模板ROI及检测ROI;
*创建模型;
*匹配模板;
*ROI仿射变换,得到ROI位置
dev_update_off()
dev_close_window ( )
*#读取整个文件夹的图像
*1 列出指定路径下的文件
list_files ('./Files', 'files', Files)
tuple_regexp_select (Files, '\\.jpg$', Files)
read_image (Image, Files[0])
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
*2 根据模板形状创建相应区域
read_image (T, './moban/moban_1.jpg')
get_image_size (T, Width, Height)
dev_set_color ('red')
*圆形
gen_circle (shape, 2093, 1630, 1773)
*矩形
*gen_rectangle1 (shape, 164.5, 126.5, 323, 476.5)
*多边形轮廓
*dev_set_color ('green')
*dev_set_line_width (3)
*坐标数组
*rows1:=[20,100,100,20,20]
*cols1:=[20,20,250,250,20]
*radius:=[20,20,20,20,20]
*rows2:=[20,20,100,100,20]
*cols2:=[320,550,550,320,320]
*带圆角的多边形轮廓
*gen_contour_polygon_rounded_xld (Contour, rows1, cols1, radius, 1)
*不带圆角的多边形轮廓
*gen_contour_polygon_xld (Contour1, rows2, cols2)
*生成十字形状
*gen_cross_contour_xld( : Cross : Row, Col, Size, Angle :)
*3 将模板从所在区域分离
* read_image (image, 'D:/0halcon/demo/20220425/2.jpg')*可以选择一个文件
*opening_circle (Image, RegionOpening, 3.5)
reduce_domain (Image, shape, ImageReduced)
*4 创建模板
*圆用create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
create_shape_model (ImageReduced, 4, rad(0), rad(360), 'auto', 'auto', 'use_polarity', 30, 10, ModelID)
*算子原型:create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
*–Template :用于创建模板的图像,是原图的模板ROI区域;
*–NumLevels:金字塔层的最大层数;
*–AngleStart:模板的最小旋转角度,以弧度为单位;
*–AngleExtent:旋转角度范围,必须≥0,以弧度为单位;如果超出角度范围,则模型搜索不到
*–AngleStep:角度步长,以弧度为单位;
*–Optimization:生成模型的优化方法;
*–Metric:模板匹配的条件,在模板与图像亮暗发生反转时可使用;
*–Contrast:创建模型时,模型点的对比度;
*–MinContrast :在搜索的图像中,搜索对象的最小对比度,必须<Contrast;
*–ModelID:模型的句柄。
*5 设置原点
area_center (shape, Area, Row1, Column1)
set_shape_model_origin (ModelID, Row1, Column1)
*set_shape_model_origin (ModelID, -Row, -Column)
*6 获取初始模板轮廓
get_shape_model_contours (ModelContours, ModelID, 1)
dev_set_color ('red')
dev_set_draw ('margin')
dev_display (ModelContours)
*7 匹配模板
for Index := 0 to |Files|-1 by 1
read_image (Image, Files[Index])
*7.1在另一幅图中查找对应区域 //进行模板匹配找模板
*开运算
*opening_rectangle1 (Image, RegionOpening, Width, Height)
find_shape_model (Image, ModelID, 0, rad(360), 0.4, 1, 0.5, 'least_squares', 0, 0.7, Row3, Column3, Angle, Score)
*算子原型:find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, *NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)*
*– Image :输入图像;
*–ModelID:模型的句柄;
*–AngleStart:模板的最小旋转角度,以弧度为单位;
*–AngleExtent:旋转角度范围,必须≥0,以弧度为单位;如果超出角度范围,则模型搜索不到
*–MinScore:要搜索到的模型实例的最小得分,如果低于此分数,则搜索不到;
*–NumMatches:要搜索到的模型实例的个数;
*–MaxOverlap:要找到的模型实例的最大重叠;
*–SubPixel:确定找到的目标是否使用亚像素精度提取;
*–NumLevels:搜索过程中使用的金字塔级别的数量 ;
*–Greediness :搜索启发式的“贪婪度”,(0:安全但缓慢;1:快,但可能匹配不到)
*–Row:找到的模型实例的行坐标,坐标值是找到模板的原点在图像坐标系中的行坐标;
*–Column:找到的模型实例的列坐标,坐标值是找到模板的原点在图像坐标系中的列坐标;
*–Angle:找到的模型实例的角度;
*–Score: 找到的模型实例的分数。
*7.2坐标转行,得到模板的ROI和检测ROI,确定匹配位置的轮廓
*7.2.1 先获取模板轮廓,获取轮廓在(0,0)位置;
*7.2.2:求模板匹配实例---的旋转矩阵;
*7.2.3:利用仿射变换---得到匹配实例--轮廓;
*7.2.4:轮廓转成区域;
if (Row3>=0) //如果找到模板数>0
*显示找到的--模板轮廓
dev_display_shape_matching_results (ModelID, 'red', Row3, Column3, Angle, 1, 1, 0)
*循环遍历每个查到的实例
for I := 0 to |Score| - 1 by 1
vector_angle_to_rigid (Row3, Column3, Angle, Row3, Column3, Angle, HomMat2D1)
*算子原型:vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)
*–Row1:原始点的行坐标;
*–Column1:原始点的列坐标;
*–Angle1:原始点的角度;
*–Row2:变换点的行坐标;
*–Column2:变换点的列坐标;
*–Angle2:变换点的角度;
*–HomMat2D:输出的变换矩阵。
*给旋转矩阵添加缩放信息
hom_mat2d_scale (HomMat2D1, 2, 2, Column3, Row3, HomMat2DScale)
*通过初始模板和旋转矩阵运算---得到模板实例轮廓
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DScale)
*轮廓转区域
gen_region_contour_xld (ContoursAffineTrans, Region, 'filled')
*得到匹配图像的轮廓线
affine_trans_contour_xld (ContoursAffineTrans, ContoursAffineTrans1, HomMat2DScale)
affine_trans_region (Region, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')
endfor
*dev_set_color ('red')
*dev_display (RegionAffineTrans)
endif
endfor
**获取指定轮廓上点的像素坐标
*get_contour_xld (ContoursAffineTrans, Row1, Col)
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Car, 'D:/Camera/test/image/car3.jpg')
decompose3 (Car, R, G, B)
trans_from_rgb (R, G, B, H, S, V, 'hsv')
* emphasize (S, ImageEmphasize, 7, 7, 5)
invert_image (S, ImageInvert)
threshold (ImageInvert, Regions1, 0, 137)
fill_up (Regions1, RegionFillUp1)
connection (RegionFillUp1, ConnectedRegions2)
select_shape (ConnectedRegions2, SelectedRegions1, 'area', 'and', 14935.1, 74489.8)
shape_trans (SelectedRegions1, RegionTrans, 'convex')
area_center (RegionTrans, Area, Row, Column)
orientation_region (RegionTrans, Phi)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D)
* affine_trans_image (ImageReduced, ImageAffineTrans, HomMat2D, 'constant', 'false')
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
affine_trans_image (Car, CarAffineTrans, HomMat2D, 'constant', 'false')
reduce_domain (CarAffineTrans, RegionAffineTrans, ImageReduced)
rgb1_to_gray (ImageReduced, GrayImage)
threshold (GrayImage, Regions, 62, 249)
connection (Regions, LetterRegions)
opening_rectangle1 (LetterRegions, RegionOpening, 4, 4)
select_shape (RegionOpening, SelectedRegions, ['area','height'], 'and', [343.12,62], [2000,88.257])
sort_region (SelectedRegions, SortedRegions, 'character', 'true', 'column')
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
invert_image (CarAffineTrans, CarImageInvert)
do_ocr_multi_class_mlp (SortedRegions, CarImageInvert, OCRHandle, Class, Confidence)
disp_message (WindowHandle, Class, 'window', 12, 12, 'black', 'true')
相关文章:
仿射变换学习
affine_trans_(iamge,region,xld):仿射变换-作用到iamge,region、xld等都可以 vector_angle_to_rigid():得到一个刚性仿射变换矩阵 orientation_region():得到指定区域的弧度(与x轴正方向的弧度)…...
基于java的爬虫框架webmagic基本使用
简单记录一下java项目实现网页爬取数据的基本使用. 需要引入的依赖 <dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.3</version></dependency><dependency><grou…...

Python每日一练(20230221)
目录 1. 不同路径 II 2. 字符串转换整数 (atoi) 3. 字符串相乘 1. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中…...

【Linux】vim拒绝服务安全漏洞修复
根据国家信息安全漏洞共享平台于2023年2月19日发布的安全漏洞通知,Linux系统自带的vim编辑器存在两个高危安全漏洞(CNVD-2023-09166、CNVD-2023-09647),攻击者可以利用该漏洞发起拒绝服务攻击,并可能运行(恶…...
moveit 2源码编译
文章目录前言下载编译过程创建开发环境拉取源代码更新rosdep下载安装moveit 2依赖包编译源码输出结果总结前言 本文用来记录moveit 2从源码编译的全流程。 本机环境: 系统:debian 11 ros版本:ros2 humble 处理器:intel i7 内存&a…...

2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A模块(4)
目录 二、竞赛注意事项 (本模块20分) 一、项目和任务描述: 二、服务器环境说明 三、具体任务(每个任务得分以电子答题卡为准) A-1任务一 登录安全加固(Windows) 1.密码策略 a.更改或创建…...

微服务保护之sentinel熔断器
文章目录 目录 文章目录 前言 一、解决微服务雪崩的问题 二、使用步骤 三、熔断器的使用 3.1 限流规则 3.1.1流控模式 3.1.2流控效果 3.2 隔离和降级 3.2.1 隔离 3.2.2 降级 四、sentinel规则持久化 总结 前言 在基于 SpringCloud 构建的微服务体系中,服务间的调用…...
电动打气泵方案开发--鼎盛合PCBA方案
开车的每一个司机都必须要知道一个事情——定期检查轮胎气压是否正常,因为轮胎胎压不足会导致轮胎过早磨损,从而造成容易发生道路交通事故,并且对汽车的操控性和牵引力带来不良影响,甚至会出现爆胎或汽车失控等极其危险的事故。电…...
第十三届蓝桥杯省赛 C++ A 组 F 题、Java A 组 G题、C组 H 题、Python C 组 I 题——青蛙过河(AC)
目录1.青蛙过河1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围7.原题链接2.解题思路Ac_code1.C2.Java1.青蛙过河 1.题目描述 小青蛙住在一条河边, 它想到河对岸的学校去学习。小青蛙打算经过河里 的石头跳到对岸。 河里的石头排成了一条直线, 小青蛙每次跳跃…...

django项目实战四(django+bootstrap实现增删改查)进阶时间控件
接上一篇《django项目实战三(djangobootstrap实现增删改查)进阶分页》 知识点: 使用bootstrap-datepicker实现时间控件 一、优化layout.html模版 主要新增2个块 {% block css %}{% endblock %}{% block js %}{% endblock %} {% load static…...

Jetpack之ViewModel
The ViewModel class is a business logic or screen level state holder. 上面是官方给的定义,ViewModel 类是业务逻辑或屏幕级状态持有者。 一、业务逻辑持有者 在此之前,无论是MVC模式,还是MVP模式,在视图层,都会…...

追梦之旅【数据结构篇】——详解C语言动态实现顺序表
详解C语言动态实现顺序表~😎前言🙌顺序表概念及结构🙌功能函数的具体实现分析:🙌尾插函数具体实现:尾删函数具体实现:头插函数具体实现:头删插函数具体实现:任意插函数具…...

xss基础
目录标题一、XSS的原理二、XSS漏洞分类1、反射型xss2、存储型XSS3、基于DOM的XSS三、XSS漏洞的危害及验证四、XSS漏洞的黑盒测试五、XSS漏洞的白盒测试一、XSS的原理 跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(…...

移动WEB开发二、流式布局
零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…...

分享在线预约系统制作步骤_在线预约链接怎么做
在微信小程序上进行在线预约,不管是商家还是顾客,都可以自由选择时间,顾客还可以通过预约小程序,了解到所选服务的详情和功能特色,不必等到去店内听介绍,顾客能节省等候时间,商家能解放招待人力…...
【每日一题Day125】LC1326灌溉花园的最少水龙头数目 | 动态规划 贪心
灌溉花园的最少水龙头数目【LC1326】 在 x 轴上有一个一维的花园。花园长度为 n,从点 0 开始,到点 n 结束。 花园里总共有 n 1 个水龙头,分别位于 [0, 1, ..., n] 。 给你一个整数 n 和一个长度为 n 1 的整数数组 ranges ,其中 …...

C# FFmpeg推流Vlc.DotNet拉流优化参数
FFmpeg是流媒体开源神器,视频转换、剪裁包括推流,无所不能,很多系统都是基于其开发的。拉流可以用FFplay,但是不利于集成到自己的代码中,因此拉流选择了Vlc.DotNet。 在使用中,仅使用默认参数,…...
pnpm v8版本升级变化关注点(前瞻速攻版)
前言 pnpm v8.0.0-alpha.0 版本已经发布,包含少量变化,但其中还是有令人在意的点的。 本文将默认读者拥有大部分 pnpm v7 版本的知识储备,进行 v8 版本的前瞻速攻。 安装方法 目前通过指定 Tag 方式可以安装 v8 alpha 版: npm…...

Python基础-环境安装
Python安装1.下载PythonPython网址:https://www.python.org/进入Python官网,点击Downloads,选择自己对应的操作系统(此处以Windows为例)在左侧的稳定发行版中,选择一个3.5版本以上的,然后点击对…...
重载、重写、重构概念辨析
首先,重载、重写、重构都表现为方法名相同 重载 重载(overload),表示同一类的方法之间的关系,至少有以下其中一种情况 参数个数不同参数类型不同参数顺序不同 注意,返回值类型不同不能作为重载依据 重…...
go语言学习 第7章:数组
第7章:数组 数组是一种基本的数据结构,用于存储相同类型的元素集合。在Go语言中,数组的大小是固定的,一旦定义,其长度不可改变。本章将详细介绍Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。 一、数组…...
“组件、路由懒加载”,在 Vue3 和 React 中分别如何实现? (copy)
Vue3 和 React 组件懒加载实现方式 React 中组件懒加载的实现方式 React 提供了 React.lazy 和 Suspense 两个 API 来实现组件的懒加载。React.lazy 用于动态导入组件,而 Suspense 则用于指定加载过程中的占位内容。例如,可以通过以下代码实现懒加载&a…...
.net webapi http参数自定义绑定模型
.NET Web API 中 HTTP 参数自定义绑定模型的深度解析 在 .NET Web API 开发里,常规的参数绑定往往能满足大部分需求。不过,当遇到一些特殊情况时,就需要自定义将 HTTP 参数绑定到 action 特定模型参数了。接下来,我们就深入探讨如…...

【Kubernetes】K8s 之 ETCD - 恢复备份
ETCD 是一个高可用的分布式键值存储,常用于存储配置信息和服务发现等。当系统出现故障或数据损坏时,能够快速恢复成先前的状态是维护系统稳定性的关键。ETCD 提供了备份和恢复功能,以确保数据持久性和可靠性,一起来看看如何操作吧…...

《绩效管理》要点总结与分享
目录 绩效管理与目标设定 绩效管理的循环:PDCA 绩效目标的设定要点 绩效设定的工具:SMART法则 绩效跟踪与评估 刻板印象:STAR法 晕轮效应:对比评价法 近因效应:关键事项评估表 绩效面谈 面谈前准备工作 汉堡…...
分布式微服务系统架构第144集:FastAPI全栈开发教育系统
加群联系作者vx:xiaoda0423 仓库地址:https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ https://github.com/webVueBlog/fastapi_plus https://webvueblog.github.io/JavaPlusDoc/ 使用docker搭建常用开发环境 docker安装mysql docker ru…...

快速上手 Metabase:从安装到高级功能实战
文章目录 1. 引言:Metabase——轻量级的数据分析工具🎯 学完本教程你能掌握: 2. 安装 Metabase:本地部署实操2.1 环境准备2.2 使用 Docker 安装 Metabase2.3 初始化设置2.4 连接外部数据库 3. 第一个数据探索:5分钟创建…...

测试W5500的第11步_使用ARP解析IP地址对应的MAC地址
本文介绍了基于W5500芯片的ARP协议实现方法,详细阐述了ARP请求与回复的工作机制。ARP协议通过广播请求和单播回复实现IP地址与MAC地址的映射,确保局域网设备间的可靠通信。文章提供了完整的STM32F10x开发环境下的代码实现,包括网络初始化、SP…...

Edge(Bing)自动领积分脚本部署——基于python和Selenium(附源码)
微软的 Microsoft Rewards 计划可以通过 Bing 搜索赚取积分,积分可以兑换礼品卡、游戏等。每天的搜索任务不多,我们可以用脚本自动完成,提高效率,解放双手。 本文将手把手教你如何部署一个自动刷积分脚本,并解释其背…...
win中将pdf转为图片
0 资料 博客 1 正文 直接使用这个软件即可https://sourceforge.net/projects/pkpdfconverter/...