HALCON学习笔记 12

本文详细介绍了使用图像处理算法进行图像分析的过程,包括图像读取、尺寸调整、阈值分割、区域连通、形状筛选、闭运算、骨架检测、长度测量及骨架端点分析等关键技术。通过具体操作步骤,展示了如何从原始图像中提取特定区域并进行精确测量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础
read_image (Image, ‘1.7.bmp’)
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width/3, Height/3, ‘black’, WindowHandle)
dev_display (Image)

binary_threshold (Image, Background, ‘max_separability’, ‘dark’, UsedThreshold)*输出为Background,选max_separability的意思就是将明暗最大限度分开,用的最多,UsedThreshold是选择明暗的阈值的最值.
reduce_domain (Image, Background, ImageReduced)*通过reduce_domain确实能获得特定区域Region位置的图像,但是,reduce_domain是缩小一个图像的定义域,并不缩小图像的实际尺寸,即新图像ImageReduced尺寸大小并未发生变化。如果使用get_image_size来计算ImageReduced图像的尺寸,其尺寸和 原图Image一样。
在这里插入图片描述

binary_threshold (ImageReduced, Background, ‘max_separability’, ‘dark’, UsedThreshold)
reduce_domain (ImageReduced, Background, ImageReduced)
在这里插入图片描述

binary_threshold (ImageReduced, Background, ‘max_separability’, ‘dark’, UsedThreshold)
reduce_domain (ImageReduced, Background, ImageReduced)

在这里插入图片描述
binary_threshold (ImageReduced, Background, ‘max_separability’, ‘dark’, UsedThreshold)

connection (Background, ConnectedRegions) *区域连通,可将阈值分割的不相连的区域分割成单个区域,分开,获得单个联通域,
select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 8077.4, 50000) **选取特定面积内的图像块

for Index := 1 to 2 by 1 *(定义一个变量后得加endfor)
select_obj (SelectedRegions, ObjectSelected, Index) *将SelectedRegions没连接的几个区域分为几个,从Index开始(从小到大,配合循环使用)各个区域储存在ObjectSelected中,由循环提取各个
closing_circle (SelectedRegions, RegionClosing, 15)*闭运算=膨胀+腐蚀。(连接细小的地方,所以叫闭)
select_obj (RegionClosing, ObjectSelected, Index)**将RegionClosing没连接的几个区域分为几个,从Index开始(从小到大,配合循环使用)各个区域储存在ObjectSelected中,由循环提取各个

*reduce_domain (ImageReduced, Background, ImageReduced1)
在这里插入图片描述

skeleton (ObjectSelected, Skeleton) *检测ObjectSelected的骨架,忽略宽度只留长度(用于测量长度备用)
gen_contours_skeleton_xld (Skeleton, Contours, 1, ‘filter’) **区域生成骨骼,骨骼转轮廓,需和上面的算子配合使用
length_xld (Contours, Length)*将轮廓Contours的长度测量后送到Length中,Length为一变量,可以直接读出

junctions_skeleton (Skeleton, EndPoints, JuncPoints) *取出骨架Skeleton中的起终点送到EndPoints,配合下面的算子取出始终点
get_region_points (EndPoints, Rows, Columns)
if (Index=1)
gen_cross_contour_xld (Cross, Rows, Columns, 90, 0.785398)
else
gen_cross_contour_xld (Cross2, Rows, Columns, 90, 0.785398)
endif
endfor

*获取面积大小
area_center (SelectedRegions, Area, Row, Column)

*注:CSND复制的可能有中文符号,比如引号之类的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值