Halcon 基础学习(8)

鼠标交互:

***画刷橡皮例子:

dev_update_off()
**创建一个灰度值不变的图像
gen_image_const(Image, 'byte', 512, 512)
**绘制region到image内
paint_region(Image,Image, ImageResult, 255, 'fill')
**获取窗口句柄
dev_get_window (WindowHandle)
button:=0
**创建空的物体元组
gen_empty_obj(re)
**当右键未点击
while(button#4)
	  **指定HDevelop中的错误处理方式
      dev_set_check ('~give_error')
      **无需等待直接监听鼠标并且都是一次触发一次返回
      get_mposition(WindowHandle, Row, Column, button) 
      **可以检查算子调用返回的结果状态
      dev_set_check ('give_error')
      if(button==1)
          gen_circle(Circle, Row, Column, 5)
          union2(re,Circle,re)
      endif
      if(button==2)
          gen_circle(Circle, Row, Column, 5)
          difference(re,Circle,re)            
      endif
      dev_display(Image)
      dev_display(re)
endwhile

***鼠标选取例子:

**创建常值灰度的图像
gen_image_const(Image, 'byte', 512, 512)

gen_circle (roi1, 302.007, 112.481, 56.9413)
gen_rectangle1 (roi2, 162.06, 325.473, 291.767, 433.335)
dev_get_window (WindowHandle)
Null:=[]
button:=0
IsInside1:=0
IsInside2:=0
**鼠标右键未点击
while(button#4)              
    **防止鼠标离开设定窗口抛出异常
    dev_set_check ('~give_error')
    **获取鼠标位置
    get_mposition(WindowHandle, Row, Column, button) 
    **测试给定点是否在区域内
    test_region_point (roi1, Row, Column, IsInside1)
    test_region_point (roi2, Row, Column, IsInside2)  
    **配合异常检测
    dev_set_check ('give_error')                         
    if(IsInside1#Null)     
        if(IsInside1)
            dev_set_color('green')                      
            dev_display(roi1)
        else
            dev_set_color('red')                      
            dev_display(roi1)                                             
        endif              
        if(IsInside2)
            dev_set_color('green')                      
            dev_display(roi2)
        else
            dev_set_color('red')                      
            dev_display(roi2)                                               
        endif
    endif                    
endwhile

***鼠标选取xld例子:

read_image (Image, 'E:/桌面/第七讲附件/2.bmp')
rgb1_to_gray(Image, GrayImage)
dev_set_line_width(5)
dev_update_off()
**提取亚像素轮廓
edges_sub_pix(GrayImage, Edges, 'canny', 1, 20, 40)
**将XLD轮廓分割成线段和圆弧或椭圆弧
segment_contours_xld(Edges, ContoursSplit, 'lines_circles', 5, 4, 2)
dev_display(GrayImage)
dev_get_window (WindowHandle)
button:=0
selindex:=[]
while(button!=4)
    dev_set_check ('~give_error')
    get_mposition(WindowHandle, Row, Column, button)
    dev_set_check ('give_error')   
    if(Row#[])
        selindex:=[]
        **生成一系列描述一个圆的点
        gen_circle_contour_xld(ContCircle, Row, Column, 5, 0, 6.28318, 'positive', 1)
        gen_empty_obj(prefind)
        count_obj(ContoursSplit,Number)
        for i:= 1 to Number by 1
            select_obj(ContoursSplit,ObjectSelected, i)
            **取出两个区域中重叠的部分
            intersection_contours_xld(ContCircle,ObjectSelected,'all', Row1, Column1, IsOverlapping)
            if(|Row1|>0)
                **两个区域组成区域集
                concat_obj(prefind,ObjectSelected,prefind)
                selindex:=[selindex,i]
            endif          
        endfor
        if(button==1)       
            dev_display(GrayImage)
            dev_display(prefind)
            button:=4   
            count_obj(ContoursSplit,Number1)
            allindex:=[1:Number1]
            for j:= 0 to |selindex|-1 by 1
                **数据移除
                tuple_remove(allindex,selindex[j]-1,allindex)                             endfor    
            select_obj(ContoursSplit,finnal,allindex)    
        endif      
        dev_display(GrayImage)
        dev_display(prefind)  
    endif 
*stop()
endwhile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值