HALCON学习之旅(四)
文章目录
1、如何对区域进行反选,补集,交集,合并操作
反选:
**************反选**************
*打开一个新的图形窗口
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
*创建一个圆
*参数1 生成的圆(输入变量)
*参数2 中心行x
*参数3 中心列y
*参数4 圆的半径
gen_circle(Circle, 224.5, 250.5, 131.727)
*清除活动图形窗口的内容。
dev_clear_window()
*返回区域的补码(反选)
*参数1 输入区域
*参数2 互补区域
complement(Circle, RegionComplement)
*清除活动图形窗口的内容。
dev_clear_window()
效果展示
补集:
**************获取一个区域的补集**************
*创建一个圆
gen_circle(Circle1, 122.5, 126.5, 69.5)
*创建一个圆
gen_circle(Circle2, 184.5, 179.5, 73.727)
*清除活动图形窗口的内容。
dev_clear_window()
*计算两个区域的差异
*参数1 要处理的区域1
*参数2 要处理的区域2
*参数3 结果区域(从区域1中减去这两个区域的联合)
difference(Circle1, Circle2, RegionDifference)
*清除活动图形窗口的内容。
dev_clear_window()
**************获取两个区域合并后的区域与两个区域交集的补集**************
*创建一个圆
gen_circle (Cricle3, 114.5, 127.5, 89.3588)
*创建一个圆
gen_circle (Cricle4, 163.5, 171.5, 94.8472)
*清除活动图形窗口的内容。
dev_clear_window()
*计算两个区域的对称差异
*参数1 要处理的区域1
*参数2 要处理的区域2
*参数3 结果区域(区域1和区域2的并集减去区域1和区域2的联合)
symm_difference(Cricle3, Cricle4, RegionDifference1)
*清除活动图形窗口的内容。
dev_clear_window()
效果展示
交集:
**************计算两个区域的交集**************
*创建一个圆
gen_circle (Cricle5, 114.5, 127.5, 89.3588)
*创建一个圆
gen_circle (Cricle6, 163.5, 171.5, 94.8472)
*计算两个区域的交集
*参数1 要处理的区域1
*参数2 要处理的区域2
*参数3 结果区域(区域1和区域2的联合)
intersection(Circle1, Circle2, RegionIntersection)
*清除活动图形窗口的内容。
dev_clear_window()
效果展示
合并:
**************返回所有输入区域的联合**************
*读取图像变量
read_image(Image, 'fabrik')
*改变活动图形窗口输出颜色(这边的12是指输出的内容可以是12种颜色)
dev_set_colored(12)
*二值化
threshold(Image, Region, 128, 255)
*获取连通区域
connection(Region, ConnectedRegions)
*返回所有输入区域的联合
*参数1 要计算联合的区域
*参数2 所有输入区域的联合(原来分开的多个区域联合成一个整体区域)
union1(ConnectedRegions, RegionUnion1)
*清除活动图形窗口的内容。
dev_clear_window()
**************将两个区域联合**************
*创建一个圆
gen_circle (Circle7, 101.5, 102.5, 63.2456)
*创建一个圆
gen_circle (Circle8, 295.5, 285.5, 75.9276)
*返回两个区域的并集
*参数1 要处理的区域1
*参数2 要处理的区域2
*参数3 结果区域(将区域1和区域2的并集)
union2 (Circle7, Circle8, RegionUnion2)
效果展示
2、如何对区域进行填充操作
*如何对区域进行填充操作
*************无条件填充*************
*读取图像变量
read_image (Image, 'egypt1')
*二值化
threshold(Image, Region, 0, 140)
*填补区域中的漏洞
*参数1 包含孔的输入区域
*参数2 没有孔的输出区域
fill_up(Region, RegionFillUp)
*************有条件填充*************
*读取图像变量
read_image(Image1, 'monkey')
*二值化
threshold(Image1, Region1, 120, 255)
*填充具有给定形状特征的区域中的孔
*参数1 输入区域
*参数2 带有填充孔的输出区域
*参数3 使用的形状特征 'anisometry'等距, 'area'面积, 'compactness'紧密度, 'convexity'凸度, 'inner_circle'内圆, 'outer_circle'外圆, 'phi'角度, 'ra'椭圆长半轴, 'rb'椭圆短半轴 默认值'area'
*参数4 功能的最小值 默认值1.0
*参数5 功能的最大值 默认值100.0
fill_up_shape(Region1, RegionFillUp1, 'area', 1, 100) //只对面积在1到100以内的区域填充
效果展示
3、如何根据区域特征过滤区域
*如何根据特征过滤区域和XLD
*打开一个新的图形窗口
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
*读取图像变量
read_image(Image, 'fabrik')
*二值化
threshold(Image, Region, 128, 255)
*获取连通区域
connection(Region, ConnectedRegions)
*根据面积范围(8000, 9000)进行过滤
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 8000, 9000)
*运算符将给定区域的形状与默认形状进行比较。如果该区域具有相似的形状,则将其用于输出。
*参数1 要选择的输入区域
*参数2 具有所需形状的区域
*参数3 要检查的形状特征 'max_area'、'rectangle1'、'rectangle2' 默认值:'max_area'
*参数4 相似性度量 默认值:70
select_shape_std(ConnectedRegions, SelectedRegions1, 'rectangle1', 90)
*筛选出彼此有一定关系的区域
*参数1 要检查的区域
*参数2 区域相比
*参数3 满足条件的区域
*参数4 要检测的特征'covers'、'distance_center'、'distance_contour'、'distance_dilate'、'fits'、'overlaps_abs'、'overlaps_rel' 默认值:'covers'
*参数5 特征下边界 默认值:50
*参数6 特征上边界 默认值:100
select_shape_proto(ConnectedRegions, SelectedRegions, SelectedRegions2, 'distance_center', 0, 200)
效果展示
4、如何画各种交互ROI图形
*如何画各种交互ROI图像
*创建一个新的图形窗口
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
*定义区域填充模式
dev_set_draw ('margin')
*交互式画圆(绘制圆结束后,按鼠标右键结束)
*参数1 图形窗口ID
*参数2 重心的行索引
*参数3 重心的列索引
*参数4 圆的半径
draw_circle(WindowHandle, Row, Column, Radius)
*创建一个圆
gen_circle (Circle, Row, Column, Radius)
*交互式话椭圆
*参数1 图形窗口ID
*参数2 重心的行索引
*参数3 重心的列索引
*参数4 前半轴方向(以弧度为单位)
*参数5 前半轴
*参数6 后半轴
draw_ellipse(WindowHandle, Row1, Column1, Phi, Radius1, Radius2)
*创建一个椭圆
gen_ellipse(Ellipse, Row1, Column1, Phi, Radius1, Radius2)
*交互式画多边形
*参数1 区域,包括所有绘制点
*参数2 图形窗口ID
draw_polygon(PolygonRegion, WindowHandle)
*交互式画线
*参数1 图形窗口ID
*参数2 开始的行索引
*参数3 开始的列索引
*参数4 结束的行索引
*参数5 结束的列索引
draw_line(WindowHandle, Row11, Column11, Row2, Column2)
*在窗口中画线
*参数1 图形窗口ID
*参数2 开始的行索引
*参数3 开始的列索引
*参数4 结束的行索引
*参数5 结束的列索引
disp_line (WindowHandle, Row11, Column11, Row2, Column2)
*交互式画标准矩形
*参数1 图形窗口ID
*参数2 左上角行索引
*参数3 左上角列索引
*参数4 右上角行索引
*参数5 右上角列索引
draw_rectangle1(WindowHandle, Row12, Column12, Row21, Column21)
*创建一个平行与坐标轴的矩形
*参数1 创建矩形变量
*参数2 左上角行索引
*参数3 左上角列索引
*参数4 右上角行索引
*参数5 右上角列索引
gen_rectangle1(Rectangle, Row12, Column12, Row21, Column21)
*交互式画仿射矩形
*参数1 图形窗口ID
*参数2 中心行索引
*参数3 中心列索引
*参数4 以弧度为单位较大半轴的方向
*参数5 较大的半轴
*参数6 较小的半轴
draw_rectangle2(WindowHandle, Row3, Column3, Phi1, Length1, Length2)
*创建一个任意方向的矩形
*参数1 创建的矩形
*参数2 中心行索引
*参数3 中心列索引
*参数4 以弧度为单位较大半轴的方向
*参数5 较大的半轴
*参数6 较小的半轴
gen_rectangle2(Rectangle1, Row3, Column3, Phi1, Length1, Length2)
*交互式画闭合区域
*参数1 交互式创建区域
*参数2 活动窗口ID
draw_region(Region, WindowHandle)
效果展示
5、读写Region区域
*读写Region(区域)
*创建一个新的图形窗口
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
*读取图像变量
read_image (Image, 'fabrik')
*交互之绘制矩形
draw_rectangle1(WindowHandle, Row1, Column1, Row2, Column2)
*创建矩形
gen_rectangle1(Rectangle, Row1, Column1, Row2, Column2)
*将区域写入文件
*参数1 返回图像区域、
*参数2 区域文件名称
write_region (Rectangle,'F:/halcon_Learning/writeRegion.hobj')
*读取二进制图像或HALCON区域
*参数1 读取区域变量
*参数2 要读取的区域名称
read_region (Rectangle1,'F:/halcon_Learning/writeRegion.hobj')
效果展示
6、读写XLD轮廓
*读写XLD(轮廓)
*读取图像变量
read_image (Image, 'fabrik')
*使用Deriche, Lanser, Shen或Canny滤波器提取亚像素精确边缘
*参数1 输入图像变量
*参数2 提取的边缘
*参数3 要应用的边缘运算符
*参数4 过滤器参数:较小的值会导致很强的平滑,因此细节较少 默认值: 1.0
*参数5 滞后阈值操作的下阈值 默认值: 20
*参数6 滞后阈值操作的上限阈值 默认值: 40
edges_sub_pix (Image, Edges, 'canny', 1, 20, 40)
*将XLD轮廓以DXF格式写入文件
*参数1 要写入的 XLD 轮廓。
*参数2 DXF 文件的名称。
write_contour_xld_dxf (Edges, 'Coutour.dxf')
*从 DXF 文件中读取 XLD 轮廓
*参数1 读取 XLD 轮廓(输出对象)
*参数2 DXF 文件的名称
*参数3 可以为 DXF 输入调整的通用参数的名称('max_approx_error'、'min_num_points'、'read_attributes'), 默认值[]
*参数4 可以为 DXF 输入调整的通用参数的值,默认值[]
*参数5 状态信息(输出)
read_contour_xld_dxf(Contours, 'F:/halcon_Learning/Coutour.dxf', [], [], DxfStatus)
效果展示