【halcon 实现橡皮擦功能,透明橡皮擦涂抹,ROI区域、屏蔽区域】

halcon 实现橡皮擦功能,透明橡皮擦涂抹,ROI区域、屏蔽区域:

最近学习halcon代码实现一些常用的视觉功能,如下代码实现了在halcon中实现橡皮擦功能,案例展示和代码如下:

案例展示

在这里插入图片描述

代码

dev_clear_window ()
dev_close_window ()
********************************屏蔽区域********************************
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
**读取图像
read_image (Image, 'printer_chip/printer_chip_01')
**备份复制图像
copy_image (Image, DupImage1)
**获取通道数,判断转换图像(1to3)
ImageRGB1 :=DupImage1
count_channels (DupImage1, Channels)
*获取原图3通道图像
if (Channels==1)
    get_image_pointer1 (DupImage1, Pointer, Type, Width, Height)
    gen_image3 (ImageRGB1, Type, Width, Height, Pointer, Pointer, Pointer)
endif
**备份复制彩色图像
copy_image (ImageRGB1, srcImageRGB)
**********************************橡皮擦**********************************
dev_clear_window ()
dev_display (DupImage1)
DupImage2:=Image
dev_set_draw ('margin')
copy_image (srcImageRGB, srcImageRGB2)
copy_image (srcImageRGB2, ImageRGB3)
**绘制并生成矩形
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle3, Row1, Column1, Row2, Column2)
**裁剪区域感兴趣区域
reduce_domain (DupImage2, Rectangle3, RoiRegion2)

**获取绘制了感兴趣区域的图像(透明色)
color := [0,0,255]
overpaint_region (ImageRGB3, Rectangle3, color, 'fill')
add_image (srcImageRGB, ImageRGB3, ImageResult1, 0.5, 0)
*stop ()
color := [255,0,0]
dev_set_color ('red')
EraserSize:= 100
Button :=0
gen_empty_obj (EraserRegion)
gen_empty_region (Region_Removeds)
*dev_set_draw ('fill')
copy_image (ImageRGB3, ImageRGB4)
dev_display (ImageResult1)
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)
            *生成橡皮擦擦过的区域
            gen_circle (EraserRegion, Row, Column, EraserSize)
            union2(Region_Removeds,EraserRegion,Region_Removeds)
            **获取绘制了感兴趣区域、屏蔽区域的图像(透明色)
            overpaint_region (ImageRGB4, Region_Removeds, color, 'fill')
            add_image (srcImageRGB2, ImageRGB4, ImageResult3, 0.5, 0)
            dev_display (ImageResult3)
     endif
     *flush_buffer (WindowHandle)
     
endwhile

**图像相减,得到不同的区域:
difference (RoiRegion2, Region_Removeds, RegionDifference2)
**获取模板图像
reduce_domain (RoiRegion2, RegionDifference2, ImageReduced2)
**创建模板**********
create_shape_model (ImageReduced2, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
find_shape_model (Image, ModelID, rad(-180), rad(180), 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)

总结

代码存在一些瑕疵,涂抹时会闪烁,暂时不准备优化,后期用C#实现应该没这种情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值