HALCON示例程序inner_rectangle1.hdev木板有效区域提取
示例程序源码(加注释)
- 关于显示类函数解释
dev_update_window (‘off’)
dev_update_var (‘off’)
dev_update_pc (‘off’)
read_image (Image, ‘wood_knots’)
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle) - 定义区域筛选变量并且初始化
MinAreaSize := 10000
MinWidth := 50
MinHeight := 50
dev_display (Image) - 动态阈值分割图像.
mean_image (Image, ThresholdImage, 31, 31)
dyn_threshold (Image, ThresholdImage, RegionDynThresh, 20, ‘dark’) - 使用圆形元素对区域进行腐蚀
erosion_circle (RegionDynThresh, RegionErosion, 1.5) - 分割连通域
connection (RegionErosion, ConnectedRegions) - 使用面积筛选区域
select_shape (ConnectedRegions, KnobRegions, ‘area’, ‘and’, 20, 200) - 使用圆形元素对区域进行膨胀
dilation_circle (KnobRegions, KnobRegionsDilated, 5.5) - 合并区域
union1 (KnobRegionsDilated, KnobRegionsUnion) - get_domain - 获取图像的域。
get_domain (Image, Domain) - 求取两区域不相交的区域
difference (Domain, KnobRegionsUnion, KnobFreeRegion) - 求取区域面积
area_center (KnobFreeRegion, Area, Row, Column) - 生成一个空对象
gen_empty_obj (KnobFreeRectangles)
while (Area > MinAreaSize)- 确定适合区域的最大轴平行矩形
inner_rectangle1 (KnobFreeRegion, Row1, Column1, Row2, Column2)
RectangleHeight := Row2 - Row1
RectangleWidth := Column2 - Column1 - 这是程序精华部分,使用一个difference完成 剩下区域最大矩形的提取。
if (RectangleHeight > MinHeight and RectangleWidth > MinWidth)- 画矩形框
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2) - 合并区域但不改变区域对象个数
concat_obj (KnobFreeRectangles, Rectangle, KnobFreeRectangles) - 求取两个区域不相交的区域
difference (KnobFreeRegion, Rectangle, KnobFreeRegion) - 求取区域面积
area_center (KnobFreeRegion, Area, Row, Column)
- 画矩形框
- 否则跳出
else
break
endif
- 确定适合区域的最大轴平行矩形
endwhile
dev_set_draw (‘margin’)
dev_set_line_width (2)
dev_display (Image)
dev_set_colored (12)
dev_display (KnobFreeRectangles)
处理思路
这个例子是主要讲解了inner_rectangle1 算子的应用,求取适合区域的最大平行于坐标轴的内部矩形。
后记
大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。