Halcon小案例--->路由器散热口个数(两种方法)

路由器散热口个数

原图在Halcon自带的图片文件夹中,图片名称是progres

*方法一:(普通方法)

编写代码
•停止运行:stop()
•关闭之前的窗口:dev_close_window ()
•获取图片:read_image ()
•阈值分割:threshold ()
•连通器:connection ()
•筛选:select_shape()
•展示区域、图像:dev_display ()
•获取个数:count_obj ()
•文本显示:dev_disp_text()
cs 复制代码
*// 停止运行//--------------------- 
stop()
*// 关闭之前的窗口//--------------------- 
dev_close_window ()
*// 获取图片//--------------------- 
read_image (Image1, 'progres')
*// 阈值分割//--------------------- 
threshold (Image1, Region1, 60, 135)
*// 连通//--------------------- 
connection (Region1, ConnectedRegions1)
*// 面积、行、列筛选//--------------------- 
select_shape (ConnectedRegions1, SelectedRegions1, ['area','row','column'], 'and', [10,271.99,90], [50,344.4,333])
*// 展示区域、图像//--------------------- 
dev_display (Image1)
*// 展示斑点//--------------------- 
dev_display (SelectedRegions1)
*// 个数//--------------------- 
count_obj (SelectedRegions1, Number1)
*// 展示个数//--------------------- 
dev_disp_text ('小孔数量'+Number1+'个', 'image',100, 100, 'black', [], [])
效果演示

*方法二:(使用抠图)

编写代码
•获取图片:read_image ()
•绘制一个仿射矩形检测区域:draw_rectangle2()
•显示绘制区域:gen_rectangle2 ()
•从原始图像中抠出绘制形状的部分:reduce_domain ()
•阈值分割:threshold ()
•连通器:connection ()
•筛选:select_shape()
•展示区域、图像:dev_display ()
•获取个数:count_obj ()
•文本显示:dev_disp_text()
•设置显示的颜色:dev_set_color()
•清空窗体:dev_clear_window ()
•获取筛选之后的角度:orientation_region ()
•弧度转角度:tuple_deg ()
•获取椭圆区域的长半径和短半径及旋转角度:elliptic_axis()
•获取区域的面积和中心点坐标:area_center ()
cs 复制代码
*// 读取图片//--------------------- 
read_image (Image, 'progres.png')
*// 获取句柄//--------------------- 
dev_get_window (WindowHandle)
*// 绘制一个仿射矩形检测区域//--------------------- 
draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
*// 显示绘制区域//--------------------- 
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
*// 从原始图像中抠出绘制形状的部分//--------------------- 
* Image 输入的原始图像
* Rectangle 裁剪的区域
* ImageReduced 输出参数 裁剪之后的图像
reduce_domain (Image, Rectangle, ImageReduced)
*// 清空窗体内容//--------------------- 
dev_clear_window ()
*// 展示裁剪之后的区域//--------------------- 
dev_display (ImageReduced)
*// 对裁剪之后的进行阈值分割//--------------------- 
threshold (ImageReduced, Region, 77, 155)
*// 连通器分析//--------------------- 
connection (Region, ConnectedRegions)
*// 获取连通区域之后的个数//--------------------- 
count_obj (ConnectedRegions, Number)
*// 清空//--------------------- 
dev_clear_window ()
*// 展示裁剪之后的区域//--------------------- 
dev_display (ImageReduced)
*// 设置显示的颜色//--------------------- 
dev_set_color ('green')
*// 展示原图//--------------------- 
dev_display (Image)
*// 设置字体大小//--------------------- 
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
*// 文本展示//--------------------- 
disp_message (WindowHandle, '小孔的个数'+Number+'个', 'image', 100, 100, 'black', 'true')
*// 面积筛选//--------------------- 
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 20, 30)
*// 获取连通之后小孔的角度 弧度//--------------------- 
orientation_region (SelectedRegions, Phi1)
*// 获取区域的面积和中心点坐标//--------------------- 
area_center (SelectedRegions, Area, Row1, Column1)
*// 获取椭圆区域的长半径和短半径及旋转角度//--------------------- 
* 参数1 SortedRegions 输入的区域/椭圆区域集合
* 参数2 Ra 输出的椭圆长半轴长度数组
* 参数3 Rb 输出的椭圆短半轴长度数组
* 参数4 Phi2 输出的椭圆方向(弧度值,0~2π)
elliptic_axis (SelectedRegions, Ra, Rb, Phi2)
*// 求所有半径的和---算子:sum(Ra)//--------------------- 
allSum := sum(Ra)
*// 个数//--------------------- 
count := |Ra|
*// 半径//--------------------- 
avg := allSum/count
*// 文本显示//--------------------- 
dev_disp_text ('半径为'+avg, 'image', 150, 100, 'black', [], [])
效果演示

希望对大家有所帮助, 感谢大家的关注和点赞。

相关推荐
小杨同学492 小时前
C 语言实战:超市水果结算系统(深度解析与优化)
后端·算法·设计
SelectDB技术团队2 小时前
驾驭 CPU 与编译器:Apache Doris 实现极致性能的底层逻辑
数据库·数据仓库·人工智能·sql·apache
没学上了2 小时前
Vlm-BERT简介
人工智能·深度学习·bert
独自破碎E2 小时前
怎么实现AI的多轮对话功能?
人工智能
阿豪Jeremy2 小时前
bert-base-chinese-ner微调总结——针对“领域实体微调”及“增量实体微调”任务
人工智能·深度学习·bert
KG_LLM图谱增强大模型2 小时前
知识图谱+大模型“驱动的生物制药企业下一代主数据管理:Neo4j知识图谱与GraphRAG及GenAI的深度整合
人工智能·大模型·知识图谱
DisonTangor2 小时前
【DeepSeek拥抱开源】通过可扩展查找实现的条件记忆:大型语言模型稀疏性的新维度
人工智能·语言模型·自然语言处理
lkbhua莱克瓦242 小时前
稠密、稀疏与MoE:大模型时代的三重架构革命
人工智能·深度学习·机器学习·ai·架构
反向跟单策略2 小时前
期货反向跟单-贵金属牛市中的反向跟单密码
大数据·人工智能·学习·数据分析·区块链