Halcon 重写Rectangle2及Arrow

验证目标:验证rotate_image后图像是否变形

获取信息:获取矩形中轴起点,终点,及四角位置信息

应用场景:1,找线找点算子封装后为检测极性指明方向

2,为二次定位提供位置信息

读取原图

复制代码
read_image (Image123, 'E:/Halcon数据/资源图片/34.png')

获取外接矩形,验证图像旋转后是否变形

复制代码
rotate_image (Image123, ImageRotate, 45, 'constant')
dev_set_color ('red')
dev_set_line_width (3)
gen_rectangle1 (ROI_0, 177.5, 213.5, 519.5, 759.5)
reduce_domain (ImageRotate, ROI_0, ImageReduced)
threshold (ImageReduced, Region, 0, 20)
smallest_rectangle2 (Region, Row, Col, Phi, Length1, Length2)
gen_rectangle2_contour_xld (Rectangle, Row, Col, Phi, Length1, Length2)

获取中轴起点,终点位置

复制代码
*中轴起点
RowStart := Row + sin(Phi) * Length1
*中轴终点
RowEnd := Row - sin(Phi) * Length1
*中轴起点
ColStart := Col - cos(Phi) * Length1
*中轴终点
ColEnd := Col + cos(Phi) * Length1
dev_display (ImageRotate)
gen_cross_contour_xld (Cross, RowStart, ColStart, 60, Phi)
gen_cross_contour_xld (Cross, RowEnd, ColEnd, 60, Phi)

获取矩形四顶点信息

复制代码
dev_display (ImageRotate)
drow := sin(rad(90) - Phi) * Length2
dcol := cos(rad(90) - Phi) * Length2
*左上
dev_set_color ('green')
RLeftUp:=Row + sin(Phi) * Length1 - sin(rad(90) - Phi) * Length2
CLeftUp:=Col - cos(Phi) * Length1 - cos(rad(90) - Phi) * Length2
gen_cross_contour_xld (Cross1, RLeftUp, CLeftUp, 60, Phi)
*右上
RRightUp:=Row - sin(Phi) * Length1 - sin(rad(90) - Phi) * Length2
CRightUp:=Col + cos(Phi) * Length1 - cos(rad(90) - Phi) * Length2
gen_cross_contour_xld (Cross2, RRightUp, CRightUp, 60, Phi)
*右下
RRightDown:=Row - sin(Phi) * Length1 + sin(rad(90) - Phi) * Length2
CRightDown:=Col + cos(Phi) * Length1 + cos(rad(90) - Phi) * Length2
gen_cross_contour_xld (Cross3, RRightDown, CRightDown, 60, Phi)
*左下
RLeftDown:= Row + sin(Phi) * Length1 + sin(rad(90) - Phi) * Length2
CLeftDown:=Col - cos(Phi) * Length1 +  cos(rad(90) - Phi) * Length2
gen_cross_contour_xld (Cross4, RLeftDown, CLeftDown, 60, Phi)

重写矩形2轮廓方式1

复制代码
dev_set_color ('blue')
gen_contour_polygon_xld (Contour, [RLeftUp,RRightUp,RRightDown,RLeftDown,RLeftUp], [CLeftUp,CRightUp,CRightDown,CLeftDown,CLeftUp])

重写矩形2轮廓方式2

复制代码
gen_contour_polygon_xld (Contour1, [RowStart - drow,RowEnd - drow,RowEnd + drow,RowStart + drow,RowStart - drow], [ColStart - dcol,ColEnd - dcol,ColEnd + dcol,ColStart + dcol,ColStart - dcol])

重写Arrow

复制代码
ArrowAngle := rad(45) / 2
ArrowLength := Length1 * 0.2
dev_display (ImageRotate)
gen_contour_polygon_xld (CProfile, [RowStart,RowEnd], [ColStart,ColEnd])
gen_contour_polygon_xld (CArrow, [RowEnd - sin(ArrowAngle - Phi) * ArrowLength,RowEnd,RowEnd + sin(ArrowAngle + Phi) * ArrowLength], [ColEnd - cos(ArrowAngle - Phi) * ArrowLength,ColEnd,ColEnd - cos(ArrowAngle + Phi) * ArrowLength])

过矩形2中点做垂直于中轴的指定长度线段

复制代码
PSize := Length2 * 0.2
gen_contour_polygon_xld (CMidPoint, [Row - sin(rad(90) + Phi) * PSize,Row - sin(Phi - rad(90)) * PSize], [Col + cos(rad(90) + Phi) * PSize,Col + cos(Phi - rad(90)) * PSize])

对于角度相对稳定目标可以采取直接偏移方式

复制代码
gen_rectangle2 (Rectangle, (RLeftUp + RLeftDown)/2-30, (CLeftUp + CLeftDown)/2+30, Phi, 30, 30)

检测目标矩形波动角度相当大时可以采用中轴点计算

以中轴点四分之一为例

复制代码
dev_display (ImageRotate)
gen_rectangle2 (Rectangle, (RowStart + Row)/2, (ColStart + Col)/2, Phi, 30, 30)
相关推荐
searchforAI1 分钟前
AI自动总结YouTube视频:英文内容一键总结、智能时间戳、视频重点快速看
人工智能·ai·音视频
cxk18082722 分钟前
2026 年9月 AI 营销机构选型方法论:基于 GEO 精采信模式的三维评估体系
大数据·人工智能·科技·ai·geo·昆明geo
威视锐科技3 分钟前
AI-RAN:下一代无线接入网,5G-A迈向6G的智能底座
人工智能·5g·威视锐
Elastic 中国社区官方博客8 分钟前
不再有分配延迟:在无状态 Elasticsearch 中将快照与分片迁移解耦
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索
俊哥V10 分钟前
每日 AI 研究简报 · 2026-09-02
人工智能·ai
人工智能时代 准备好了吗14 分钟前
搜索别名治理实用指南:在首次出现时说明主名称与别名关系
人工智能
人工智能时代 准备好了吗16 分钟前
同名品牌如何避免被AI认错?
人工智能
wdfk_prog16 分钟前
canopennode-rtt推荐,不只可以做从站,也可以承担主站角色
c语言·开发语言·数据库·学习·算法·深度优先
段一凡-华北理工大学23 分钟前
高炉智能布料技术与炉料分布优化~专栏简介与目录
android·人工智能·高炉智能化·高炉布料·高炉布料分布·高炉布料参数优化·高炉布料矩阵
火山引擎开发者社区23 分钟前
GLM-5.3 系列落地 veStack:面向复杂编码与多模态 Agent 的企业部署
人工智能