halcon 实现透明多边形ROI区域,并将ROI区域创建为模板,进行模板匹配

halcon 实现透明多边形ROI区域,并将ROI区域创建为模板,进行模板匹配。

前言

案例展示

请添加图片描述

核心内容

*1、halcon 实现透明多边形ROI区域 使用算子生成点
gen_circle (Point, Row, Column,PointSize)

*2、使用算子将点 连接成多边形区域。
gen_region_polygon (Region,Rows, Columns)

*3、填充生成的区域
fill_up (Region, RegionFillUp)

*4、先清空窗口,再设置透明填充
dev_clear_window ()
dev_display (Image)
dev_set_draw (‘fill’)
set_rgba (WindowHandle, 0, 0,255, 100)
disp_region (RegionFillUp, WindowHandle)

**5、裁剪模板图像
reduce_domain (Image, RegionFillUp, ModelImage)

*6、创建模板
create_shape_model (ModelImage, ‘auto’, -0.39, 0.79, ‘auto’, ‘auto’, ‘use_polarity’, ‘auto’, ‘auto’, ModelID)

**7、查找模板
find_shape_model (Image, ModelID, -0.39, 0.79, 0.5, 1, 0.5, ‘least_squares’, 0, 0.9, Row3, Column3, Angle, Score)

*8、获取模板轮廓
get_shape_model_contours (ModelContours, ModelID, 1)

*9、将模板映射到目标上
*根据匹配到的点和角度生成对应的2D矩阵
vector_angle_to_rigid (0, 0, 0, Row3, Column3, Angle, HomMat2D)
**使用仿射变换生成轮廓点,用于显示匹配到的轮廓
affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D)

完整代码

dev_clear_window ()
dev_close_window ()
*打开窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*读取图像
read_image (Image, 'printer_chip/printer_chip_01')

*按钮值
Button :=0
*点大小
PointSize :=5
*点颜色
dev_set_color ('blue')
*创建数组存储点
Rows := []
Columns := []
Length :=1
while (Button!=4)
    Row:=-1
    Column :=-1
    dev_set_check ('~give_error')
    **等待按钮按下
     get_mbutton (WindowHandle, Row, Column, Button)
     dev_set_color('blue')
     **获取鼠标位置及鼠标按钮状态
     *get_mposition (WindowHandle, Row, Column, Button)
     dev_set_check ('give_error')
    if (Button==1)
        gen_circle (Point, Row, Column, PointSize)
        Rows:=[Rows,Row]
        Columns:=[Columns,Column]
        *生成连接线
        gen_region_polygon (Region,Rows, Columns)
    endif
    *绘制的点必须大于2,否则无法重合区域
    if (Button==4 and |Rows|<3)
         Button :=0
        * 设置字体颜色和大小
        dev_set_color('red')
        set_display_font (WindowHandle, 12, 'mono', 'true', 'false')
        * 在指定区域内写入字符串
        content := 'The number of points is less than 2. Please Continue draw!'
        disp_message(WindowHandle, content, 'window', 0 + 10, 0 + 10, 'red', 'true')
        stop ()
     endif
endwhile
*第一个点跟最后一个点为同一个点,形成闭合区域
Region_Rows:=[Rows,Rows[0]]
Region_Columns:=[Columns,Columns[0]]
dev_set_draw ('fill')
*生成区域
gen_region_polygon (Region,Region_Rows, Region_Columns)
*生成填充区域
fill_up (Region, RegionFillUp)
dev_clear_window ()
dev_display (Image)
dev_set_draw ('fill')
set_rgba (WindowHandle,  0, 0,255, 100)
disp_region (RegionFillUp, WindowHandle)
stop ()
****************************************************************************************************
**裁剪模板图像
reduce_domain (Image, RegionFillUp, ModelImage)
*创建模板
create_shape_model (ModelImage, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
**查找模板
find_shape_model (Image, ModelID, -0.39, 0.79, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row3, Column3, Angle, Score)

*获取模板轮廓
get_shape_model_contours (ModelContours, ModelID, 1)
dev_set_color ('green')
dev_clear_window ()
dev_display (Image)
dev_set_line_width (2)
*将模板映射到目标上
vector_angle_to_rigid (0, 0, 0, Row3, Column3, Angle, HomMat2D)
affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D)


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Halcon中,ROI是指感兴趣区域(Region of Interest),用于指定图像中我们感兴趣的部分。ROI可以是任何形状,如矩形、圆形、多边形等。通过定义ROI,我们可以对感兴趣区域进行分析、处理和测量。Halcon中的ROI对象是Region类的实例,可以通过一系列的操作来创建、修改和使用ROI。 引用\[2\]中提到的Region类是Halcon中最主要的ROI类型之一。除了Region类,Halcon还有其他的ROI类型,如Xld(Extended Line Description)和Image。每个ROI类型都有其特定的功能和用途。Region类主要用于表示二维区域,如矩形、圆形、多边形等。Xld类主要用于表示二维线段,如直线、圆弧等。Image类主要用于表示图像区域,可以用于图像的分割和处理。 在Halcon中,我们可以使用一系列的函数和操作来创建和操作ROI。例如,我们可以使用gen_rectangle1函数创建一个矩形ROI,使用gen_circle函数创建一个圆形ROI,使用gen_polygon函数创建一个多边形ROI。我们还可以使用一些操作函数,如union1、intersection、difference等来对ROI进行组合、交集和差集操作。 总之,ROIHalcon中是用于指定图像中感兴趣区域的对象,可以通过一系列的函数和操作来创建、修改和使用。不同的ROI类型有不同的功能和用途,可以根据具体的需求选择合适的ROI类型进行操作。 #### 引用[.reference_title] - *1* *2* *3* [Halcon纠错方法总结,机器视觉Halcon常见错误解决办法](https://blog.csdn.net/m0_65636467/article/details/130889418)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值