halcon 实现橡皮擦功能,透明橡皮擦涂抹,ROI区域、屏蔽区域 ---方法2

前言

halcon 实现橡皮擦功能,透明橡皮擦涂抹,ROI区域、屏蔽区域 方法2
相比较于之前的图像相加的方法的性能,这个方法应该会更好。因为这是设置显示的区域在窗体上的颜色。不用重复对图像进行操作。

参考

Halcon ROI透明涂抹实现方式

案例效果演示

在这里插入图片描述

案例代码

dev_clear_window ()
dev_close_window ()
********************************屏蔽区域********************************
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
**读取图像
read_image (Image, 'printer_chip/printer_chip_01')
**设置线宽、颜色、绘制模式(外边距)
dev_set_line_width (1)
dev_set_color ('blue')
dev_set_draw ('margin')
**绘制矩形1ROI区域
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
*生成矩形1ROI
gen_rectangle1 (Region_ROI, Row1, Column1, Row2, Column2)

*设置后mask将显示为透明的蓝色,第四个参数控制透明度,范围:0~255
*设置绘制模式(填充)
dev_set_draw ('fill')
**蓝色透明色填充
set_rgba (WindowHandle,0,0,255,160)
**显示区域
disp_region (Region_ROI, WindowHandle)

stop ()
**橡皮擦大小
EraserSize := 100
**移除区域
gen_empty_region (Region_Removeds)
**保留区域
gen_empty_region (Region_Reserveds)
**获取图像宽高
**get_image_size (Image, Width, Height)
**生成图像行高,列宽
**gen_rectangle1 (Region2, 0, 0, Height, Width)
*按钮状态
Button :=0
**循环等待擦除,右键结束
while (Button!=4)
     Row := -1
     Column := -1
     dev_set_check ('~give_error')
     **获取鼠标位置及鼠标按钮状态
     get_mposition (WindowHandle, Row, Column, Button)
     dev_set_check ('give_error')
     **判断是否按下左键
     if (Button==1)
         dev_set_draw ('margin')
         *生成涂抹的区域
         gen_circle (EraserRegion, Row, Column, EraserSize)
         **合并之前涂抹的区域
         union2(Region_Removeds,EraserRegion,Region_Removeds)
         **获取两个区域差异区域,
         difference (Region_ROI, Region_Removeds, Region_Reserveds)
         **显示图像
         dev_display (Image)
         **设置填充,重新显示被涂抹后的ROI区域
         dev_set_draw ('fill')
         set_rgba (WindowHandle,0,0,255,160)
         disp_region (Region_Reserveds, WindowHandle)
     endif
     
endwhile
dev_clear_window ()
dev_display (Image)

dev_set_draw ('fill')
**显示ROI区域
set_rgba (WindowHandle,0,0,255,160)
disp_region (Region_ROI, WindowHandle)
**显示保留的ROI区域
set_rgba (WindowHandle,0,255,0,160)
disp_region (Region_Reserveds, WindowHandle)
**显示屏蔽的ROI区域
set_rgba (WindowHandle,255,0,0,160)
disp_region (Region_Removeds, WindowHandle)
stop ()
**裁剪模板图像
reduce_domain (Image, Region_Reserveds, 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)
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值