Halcon 橡皮擦功能

文章目录

原文链接

转载

* ==========================
* 初始化窗口和图像操作
* ==========================
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

* 读取图像
read_image (Image, 'printer_chip/printer_chip_01')

* 备份复制图像
copy_image (Image, DupImage1)

* 获取通道数,判断是否需要转换为 RGB 图像
count_channels (DupImage1, Channels)
if (Channels == 1)
    get_image_pointer1 (DupImage1, Pointer, Type, Width, Height)
    gen_image3 (ImageRGB1, Type, Width, Height, Pointer, Pointer, Pointer)
else
    ImageRGB1 := DupImage1
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)

* 橡皮擦初始化
color := [255, 0, 0]
dev_set_color ('red')
EraserSize := 100
Button := 0
gen_empty_obj (EraserRegion)
gen_empty_region (Region_Removeds)

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
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)
dev_display (ContoursAffinTrans)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值