Blob分析:
主要是对图像进行处理,通过想要获取的内容画相对应的ROI区域,进行阈值分割等系列操作等到想要的内容
下列代码都是对下列这张图做操作(这个图来自halcon,可直接调用)
这是Blob分析后得到的结果:
通过绘制矩形来确定要得到内容的ROI区域,进行阈值分析,特征筛选等操作
不同ROI及阈值等操作得到不同的区域:
halcon找线:画线不同方向可能有的能得到,有的不能,此时需要调整阈值或寻找方向(由亮到暗等)或者改变画线方向就能得到
halcon找圆:与找线几乎一样,注意一些参数的设置
完整代码如下:
read_image (Image, 'green-dot')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
i:=4
*blob分析
if(i==1)
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image, Rectangle, ImageReduced)
threshold (ImageReduced, Region, 0, 100)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 100, 1000)
dev_clear_window ()
dev_display(Image)
dev_display (SelectedRegions)
endif
if(i==2)
draw_rectangle1 (WindowHandle, Row11, Column11, Row21, Column21)
gen_rectangle1 (Rectangle1, Row11, Column11, Row21, Column21)
reduce_domain (Image, Rectangle1, ImageReduced1)
threshold (ImageReduced1, Regions, 74, 210)
connection (Regions, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 1800, 49999)
union1 (SelectedRegions1, RegionUnion)
dev_clear_window ()
dev_display(Image)
dev_display (RegionUnion)
endif
*找直线工具
if(i==3)
draw_line (WindowHandle, Row12, Column12, Row22, Column22)
shapeParam:=[Row12,Column12,Row22,Column22]
*创建句柄
create_metrology_model (MetrologyHandle)
set_metrology_model_image_size (MetrologyHandle, Width, Height)
*添加线模型````````````````` 卡尺长卡尺宽 阈值
add_metrology_object_generic (MetrologyHandle, 'line', shapeParam, 20, 5, 1, 30, [], [], Index)
*根据需求设置 测量区域数量 没懂
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 2)
*measure_distance 测量卡尺之间的距离
set_metrology_object_param (MetrologyHandle, 'all', 'measure_distance', 5)
*measure_transition 由亮到暗等
set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'negative')
*measure_threshold 阈值
set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold', 30)
apply_metrology_model (Image, MetrologyHandle)
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)
endif
*找圆工具
if(i==4)
draw_circle (WindowHandle, Row3, Column3, Radius)
gen_circle (Circle, Row3, Column3, Radius)
reduce_domain (Image, Circle, ImageReduced2)
create_metrology_model (MetrologyHandle1)
*add_metrology_object_generic (MetrologyHandle1, 'circle', Row3, 20, 5, 1, 30, [], [], Index2)
add_metrology_object_circle_measure (MetrologyHandle1, Row3, Column3, Radius, 20, 5, 1, 30, [], [], Index1)
set_metrology_object_param (MetrologyHandle1, 'all', 'measure_transition', 'positive')
set_metrology_object_param (MetrologyHandle1, 'all', 'measure_threshold', 50)
*测量并拟合测量模型中所有测量对象的形状
apply_metrology_model (Image, MetrologyHandle1)
*获取测量对象的测量区域和边缘点位置坐标
get_metrology_object_measures (Contours2, MetrologyHandle1, 'all', 'all', Row5, Column5)
*获取测量结果 Parameter是圆心坐标和半径
get_metrology_object_result (MetrologyHandle1, 'all', 'all', 'result_type', 'all_param', Parameter)
*获取测量对象轮廓,测量模型拟合出来的圆
get_metrology_object_result_contour (Contour1, MetrologyHandle1, 'all', 'all', 1.5)
gen_cross_contour_xld (Cross1, Row5, Column5, 6, 0.785398)
dev_set_color ('green')
dev_display (Contour1)
endif