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', [], [])
效果演示

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

相关推荐
HyperAI超神经几秒前
覆盖天体物理/地球科学/流变学/声学等19种场景,Polymathic AI构建1.3B模型实现精确连续介质仿真
人工智能·深度学习·学习·算法·机器学习·ai编程·vllm
小陈phd8 分钟前
系统测试与落地优化:问题案例、性能调优与扩展方向
人工智能·自然语言处理
模型时代10 分钟前
伯明翰Oracle项目遭遇数据清洗难题和资源短缺困境
人工智能
大黄说说10 分钟前
TensorRTSharp 实战指南:用 C# 驱动 GPU,实现毫秒级 AI 推理
开发语言·人工智能·c#
执着25910 分钟前
力扣hot100 - 144、二叉树的前序遍历
数据结构·算法·leetcode
范纹杉想快点毕业14 分钟前
嵌入式系统架构之道:告别“意大利面条”,拥抱状态机与事件驱动
java·开发语言·c++·嵌入式硬件·算法·架构·mfc
近津薪荼18 分钟前
递归专题(4)——两两交换链表中的节点
数据结构·c++·学习·算法·链表
王锋(oxwangfeng)18 分钟前
基于 DINO 与 Chinese-CLIP 的自动驾驶语义检索系统架构
人工智能·机器学习·自动驾驶
巫婆理发22219 分钟前
自然语言处理与词嵌入
人工智能·自然语言处理
2501_9403152619 分钟前
【无标题】2390:从字符串中移除*
java·开发语言·算法