halcon学习笔记(2)——clip例子学习(直方块图和特征直方块图)

    例子在HDevelop自带例子里面,叫clip;这里讲我实验的内容,机械视觉目的:检测照片中图像,标记中心位置及其方向,代码如下:

dev_update_window ('off')
read_image (Image, 'E:/test2.jpg')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width , Height, 'black', WindowID)
dev_display (Image)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
disp_continue_message (WindowID, 'black', 'true')
stop ()
threshold (Image, Regions, 49, 95)
connection (Regions, Regions)
select_shape (Regions, SelectedRegions, 'area', 'and', 1380, 2242)
dev_set_draw ('fill')
dev_set_colored (12)
dev_display (SelectedRegions)
disp_continue_message (WindowID, 'black', 'true')
stop ()
dev_display (Image)
dev_set_color ('green')
dev_display (SelectedRegions)
orientation_region (SelectedRegions, Phi)
area_center (Regions, Area, Row, Column)
dev_set_line_width (3)
dev_set_draw ('margin')
Length := 80
for i := 0 to |Phi| - 1 by 1
    dev_set_color ('blue')
    disp_arrow (WindowID, Row[i], Column[i], Row[i] - Length * sin(Phi[i]), Column[i] + Length * cos(Phi[i]), 4)
    disp_message (WindowID, deg(Phi[i])$'3.1f' + ' deg', 'image', Row[i], Column[i] - 100, 'black', 'false')
endfor

         这是原始图,找了张白纸自己记号笔画的,然后用手机拍的照片。

         

        结果图像如上图。

        下面一步一步说代码:

dev_update_window ('off')

这句如字面意思,就关闭窗口图形的刷新


read_image (Image, 'E:/test2.jpg')

这句也如字面,读取图像,可以在算子窗口输入,然后在filename打开图片所在位置,点击确定即可直接插入上面的程序,算子窗口如下:



get_image_size (Image, Width, Height)

如字面意思,获取图像的尺寸;



dev_close_window ()

dev_open_window (0, 0, Width , Height, 'black', WindowID)

dev_display (Image)

set_display_font (WindowID, 14, 'mono', 'true', 'false')

disp_continue_message (WindowID, 'black', 'true')

stop ()

上面这几句也如字面意思,主要是窗口显示的样式及消息提醒什么的(比如按F5继续等),写程序也可运行,窗口会默认显示步骤;


threshold (Image, Regions, 49, 95)

这句很重要,是灰度直方块图的阈值算子,这个一定要点击灰度直方块图命令来输出,你可以通过调节阈值范围来去除不需要的图形和干扰,如下图中右图里,红色90的那条线就是,就是灰度阈值范围在0-90之间,调节时候右图回随着阈值变化而变化,记得点插入代码上面“阈值”前面有个小图标,这个是实时显示的,不然你调时候右图不会刷新,调到你满意然后点击插入代码就可以,如上面的代码:



connection (Regions, Regions)

这句写就可以了,如字面计算连通域的命令,是为了特征直方块图做准备的;


select_shape (Regions, SelectedRegions, 'area', 'and', 1380, 2242)

这句是特征直方图的代码,灰度直方图一样,不用写,在特征直方图中调出即可,样式如下图:





dev_set_draw ('fill')

dev_set_colored (12)

dev_display (SelectedRegions)

disp_continue_message (WindowID, 'black', 'true')

stop ()

dev_display (Image)

dev_set_color ('green')

dev_display (SelectedRegions)

上面语句也是界面显示的,可以按F1查看帮助,这里不赘述了



orientation_region (SelectedRegions, Phi)

这句是计算图形方向的算子,Phi是角度,计算方法是计算图形长宽比例,长方向,窄边为方向向量;


area_center (Regions, Area, Row, Column)

这句是计算图形中心的算子


dev_set_line_width (3)

线宽


dev_set_draw ('margin')

画斜线


Length := 80

线长


for i := 0 to |Phi| - 1 by 1

    dev_set_color ('blue')

    disp_arrow (WindowID, Row[i], Column[i], Row[i] - Length * sin(Phi[i]), Column[i] + Length * cos(Phi[i]), 4)

    disp_message (WindowID, deg(Phi[i])$'3.1f' + ' deg', 'image', Row[i], Column[i] - 100, 'black', 'false')

endfor

这句是循环以图形中心划线,画箭头,并在中心位置标记角度的文字

        怎么样,是不是比opencv简单明了,当然opencv也可以做到,找到对应的相关函数和算子,然后按照这个思路编程就好,就是到了直方块图时候就比较麻烦。





  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值