Halcon学习(一):常用算子、函数和阈值分割、模板匹配

目录

  • 一、常用算子、函数
    • 1、窗口
    • 2、图片
    • 3、形状
    • 4、字体
    • 5、其他
  • 二、阈值分割
    • 1、核心
    • 2、
  • 三、模板匹配
    • 1、核心
    • 2、完整代码及结果展示


一、常用算子、函数

1、窗口

1、新建窗口

*参数:左上角坐标x,y,窗口宽,高,背景颜色,窗口句柄
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)

*参数:输入图片,窗体左上角坐标x,y,窗体宽度的范围(默认-1也可[100200]),窗体高度的范围(默认-1也可[100200]),窗体句柄
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)

*参数:窗体左上角坐标x,y,窗体宽度的范围(默认-1也可[100200]),窗体高度的范围(默认-1也可[100200]),窗体句柄
dev_open_window_fit_size (0, 0, Width, Height, -1, -1, WindowHandle)

2、设置窗口属性

*定义窗口区域填充模式  如果设置为'fill',则区域显示为已填充;如果设置为'margin',则仅显示轮廓。
dev_set_draw ('margin')

3、清除当前窗口的内容

dev_clear_window()

4、关闭窗口

dev_close_window()

5、其他

*获取活动窗口的句柄 
dev_get_window (WindowHandle)

*激活窗体  参数:窗体句柄
dev_set_window (WindowHandle)

2、图片

*读取图片 参数:图片句柄,图片路径
read_image (Image, 'C:1.png')

*灰度  参数:输入图片,输出图片
rgb1_to_gray (Image, GrayImage)

*在当前图形窗口中显示图像对象 参数:输入图像  (用于关闭窗体后,重新给另一个窗体图像)
dev_display (Image)

3、形状

1、矩形

*创建矩形  参数:矩形句柄,矩形的左上角坐标x,y,矩形的右下角坐标x,y
gen_rectangle1 (Rectangle, 230, 45, 296, 107)

*创建矩形  参数:矩形句柄,矩形中心坐标x,y,弧度,一半的宽度,一半的高度
gen_rectangle2 (Rectangle, 300, 200, 0, 100, 20)

*创建矩形 参数:矩形句柄,矩形中心坐标x,y,弧度,一半的宽度,一半的高度
gen_rectangle2_contour_xld (Rectangle, 500, 200,rad(90), 200, 20.5)

Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第1张图片
注意:如果矩形为填充,则需将窗体属性改成轮廓(看各自需求)
Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第2张图片

2、圆形

*创建圆形 参数:圆形句柄,圆心x,y,圆的半径
gen_circle (Circle, 290, 369, 146)

*创建一个圆或圆弧 参数:圆或圆弧句柄,圆心x,y,圆的半径,圆或圆弧起点的角度,圆或圆弧端点的角度,方向(默认为正:顺时针),相邻轮廓点之间的距离
gen_circle_contour_xld (ContCircle, 200, 200, 100, 0, rad(90), 'positive', 1)

*创建一个圆弧扇形  参数:圆弧扇形的句柄,圆心x,y,半径,圆或圆弧起点的角度,圆或圆弧端点的角度
gen_circle_sector (CircleSector, 150, 150, 100, 0, 3.14159)

*创建一个椭圆  参数:椭圆句柄,圆心x,y,较长半径的方向,较长半径,较短半径
gen_ellipse (Ellipse, 182, 273, rad(-59.3493), 94, 16)

*创建一个椭圆或椭圆弧  参数:椭圆或椭圆弧句柄,圆心x,y,较长半径的方向,较长半径,较短半径,圆或圆弧起点的角度,圆或圆弧端点的角度,方向(默认为正:顺时针),相邻轮廓点之间的距离
gen_ellipse_contour_xld (ContEllipse, 200, 200, 0, 100, 50, 0, rad(90), 'positive', 1.5)

*创建一个椭圆扇形  参数:椭圆扇形的句柄,圆心x,y,较长半径的方向,较长半径,较短半径,圆或圆弧起点的角度,圆或圆弧端点的角度
gen_ellipse_sector (EllipseSector, 200, 200, 0, 100, 60, 0, 3.14159)

Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第3张图片
Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第4张图片
Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第5张图片
Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第6张图片
在这里插入图片描述
在这里插入图片描述

3、十字形状

*为每个输入点生成一个十字形状  参数:十字的句柄,输入点坐标x,y,十字形状的长度,角度
gen_cross_contour_xld (Cross, 100, 100, 6, 0)

在这里插入图片描述
4、通用
一般可以直接通过roi来直接生成代码
Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第7张图片
Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第8张图片
Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第9张图片

4、字体

*设置字体独立于操作系统  参数:窗体,字体大小,字体名称,是否粗体,是否倾斜
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')

*此过程在屏幕右下角显示“单击运行继续”    参数:输入窗体,文本颜色,如果设置为“true”,则文本将写在白色框中
disp_continue_message (WindowHandle, 'black', 'true')
*后面一般会加 stop()(停止程序执行)

在这里插入图片描述

5、其他

*赋值
a:=10

*90°的弧度
rad(90)

*|X|为数组X的总个数
Array := [1,2,3]
X := []
B := |X|

*for循环:i从010,增量为1
for i := 0 to 10 by 1
endfor

二、阈值分割

1、核心

*使用二进制阈值分割图像  参数:输入图像,输出区域,方法,提取暗或亮,已使用的阈值
binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
*使用全局阈值分割图像 参数:输入图像,输出区域,灰度值的下限阈值,灰度值的上限
*threshold (Image, Region1, 128, 255)

*输入一个区域,输出的为多个区域
connection (Region, ConnectedRegions)

*借助形状特征选择区域  参数:输入区域,输出区域,要检查的形状特征,各个要素的链接类型,下限,上限
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5000, 10000)

2、

read_image (Image, 'clip')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
disp_continue_message (WindowHandle, 'black', 'true')
stop()

*使用二进制阈值分割图像  参数:输入图像,输出区域,方法,提取暗或亮,已使用的阈值
binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
connection (Region, ConnectedRegions)
*借助形状特征选择区域  参数:输入区域,输出区域,要检查的形状特征,各个要素的链接类型,下限,上限
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5000, 10000)

*计算区域的方向
orientation_region (SelectedRegions, Phi)
*计算区域的面积和中心点坐标
area_center (SelectedRegions, Area, Row, Column)

*设置窗口
dev_set_line_width (3)
dev_set_draw ('margin')

*将字符串显示在窗口上  参数:输入窗体,字符串,坐标x,y,字体颜色,
*如果设置为“ true”,则文本将写在橙色框中。如果设置为“ false”,则不会显示任何框
disp_message (WindowHandle, '角度='+Area, 'window', Row, Column, 'black', 'true')

Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第10张图片

三、模板匹配

1、核心

*创建一个形状模型进行匹配 
*参数:图片,金字塔等级,最小旋转角度,旋转角度的范围,角度的步长,优化,匹配指标,模板图像中对象对比度的阈值,搜索图像中对象的最小对比度模型的句柄
*auto:自动
create_shape_model (ImageReduced, 'auto', 0, 0, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
 
*在图像中找到形状模型的匹配。
*参数 输入图像,模型,搜索最小角度,范围,最低分数阈值,要找到的模型的个数,模型实例的最大重叠量,亚像素精度,金字塔等级数,搜索试探法的“贪婪感”(0:安全但缓慢; 1:快速但可能错过比赛),
*找到的模型的坐标x,y,找到的模型的旋转角度,找到的模型的分数
find_shape_model (Image, ModelID, 0, 0.79, 0.7, 0, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)

2、完整代码及结果展示

*关闭窗口
dev_close_window()
*更新
dev_update_off()

*读取图片 参数:图片句柄,图片路径
read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-18.11-Steady/examples/images/ampoules/ampoules_01.png')
*获取图片大小  参数:输入图片,图片的宽,图片的高
get_image_size (Image, Width, Height)
*新建窗口  参数:输入图片,窗体左上角坐标x,y,窗体宽度的范围(默认-1也可[100200]),窗体高度的范围(默认-1也可[100200]),窗体句柄
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
*定义窗口区域填充模式  如果设置为'fill',则区域显示为已填充;如果设置为'margin',则仅显示轮廓。
dev_set_draw ('margin')
*轮廓输出的线宽
dev_set_line_width (3)
*设置字体独立于操作系统  参数:窗体,字体大小,字体名称,是否粗体,是否倾斜
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')

*创建矩形  参数:矩形句柄,矩形的左上角坐标x,y,矩形的右下角坐标x,y
gen_rectangle1 (Rectangle, 230, 45, 296, 107)
*将矩形区域内的图片截取出 参数:输入图片,输入矩形,输出图像
reduce_domain (Image, Rectangle, ImageReduced)

*创建一个形状模型进行匹配 
*参数:图片,金字塔等级,最小旋转角度,旋转角度的范围,角度的步长,优化,匹配指标,模板图像中对象对比度的阈值,搜索图像中对象的最小对比度模型的句柄
*auto:自动
create_shape_model (ImageReduced, 'auto', 0, 0, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
 
*在图像中找到形状模型的匹配。
*参数 输入图像,模型,搜索最小角度,范围,最低分数阈值,要找到的模型的个数,模型实例的最大重叠量,亚像素精度,金字塔等级数,搜索试探法的“贪婪感”(0:安全但缓慢; 1:快速但可能错过比赛),找到的模型的坐标x,y,找到的模型的旋转角度,找到的模型的分数
find_shape_model (Image, ModelID, 0, 0.79, 0.7, 0, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)

*for循环:i从0|Row|-1,增量为1
for i := 0 to |Row|-1 by 1
    gen_cross_contour_xld (Cross, Row[i], Column[i], 6, Angle[i])
endfor

Halcon学习(一):常用算子、函数和阈值分割、模板匹配_第11张图片

你可能感兴趣的:(Halcon)