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

您所在的位置:网站首页 Halcon模板匹配不出来 Halcon学习(一):常用算子、函数和阈值分割、模板匹配

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

2023-11-19 13:13| 来源: 网络整理| 查看: 265

目录 一、常用算子、函数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也可[100,200]),窗体高度的范围(默认-1也可[100,200]),窗体句柄 dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) *参数:窗体左上角坐标x,y,窗体宽度的范围(默认-1也可[100,200]),窗体高度的范围(默认-1也可[100,200]),窗体句柄 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)

在这里插入图片描述 注意:如果矩形为填充,则需将窗体属性改成轮廓(看各自需求) 在这里插入图片描述

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)

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

3、十字形状

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

在这里插入图片描述 4、通用 一般可以直接通过roi来直接生成代码 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

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从0到10,增量为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')

在这里插入图片描述

三、模板匹配 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也可[100,200]),窗体高度的范围(默认-1也可[100,200]),窗体句柄 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

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3