分拣螺钉

取得一副图像,需要完成分拣功能,如下图,


可以粗略分析出完成这个图像处理的步骤:

(1)读图;

(2)阀值化;

(3)连通;

(4)填充;

(5)选择特征;

下面尝试使用不同的方法来完成:

方法一:

今天学习了用Halcon做模板,还算比较成功,但是多找了一个圆,原因还不知道,以后补充!

dev_update_window('off')

*读图片
read_image(Image, 'C:/Documents and Settings/Administrator/桌面/桌面/螺钉分拣.bmp')

*清除窗口
dev_clear_window()

*关闭窗口
dev_close_window()

*获取图片大小
get_image_size(Image, Width, Height)

*打开窗口
dev_open_window(0, 0, Width, Height, 'black', WindowHandle1)

*显示Image
dev_display(Image)

*按照轮廓显示
dev_set_draw('margin')

*选中需要建立模板的区域,记下坐标值,填充gen_rectangle()函数,不用每次都画
* draw_rectangle1(WindowHandle1, Row1, Column1, Row2, Column2)

*创建一个平行于坐标轴的矩形
gen_rectangle1(Rectangle, 203.5, 314.5, 296.5, 384.5)

*在一个图像中的一个区域中采集图像
reduce_domain(Image, Rectangle, ImageReduced)

*全局二值化阈值分割
bin_threshold(ImageReduced, Region1)

*将阈值分割后的面积分开
connection(Region1, ConnectedRegions1)

*把一个范围内的区域忽略掉
fill_up_shape(ConnectedRegions1, RegionFillUp1, 'area', 1, 100)

*闭合一个区域一个圆形的结构化元素
closing_circle (RegionFillUp1, RegionClosing, 3.5)

*????????
gen_contour_region_xld (RegionClosing, Contours, 'border_holes')

*????????
create_shape_model_xld (Contours, 3, rad(0), rad(360), 'auto', 'auto', 'ignore_local_polarity', 5, ModelID2)

*
get_shape_model_contours (ModelContours1, ModelID2, 1)

*
find_shape_model (Image, ModelID2, rad(0), rad(360), 0.921, 10, 0.5, 'least_squares', 0, 0.95, Row3, Column3, Angle1, Score1)

*
for i := 0 to 3 by 1
    *
    vector_angle_to_rigid (0, 0, 0, Row3[i], Column3[i], Angle1[i], HomMat2D1)
    
    *
    affine_trans_contour_xld (ModelContours1, ContoursAffinTrans1, HomMat2D1)
endfor

方法二:

dev_update_window('off')
read_image(Image, '分类管理/学习/Halcon_Along/分拣螺钉/螺钉分拣.bmp')
get_image_pointer1(Image, Pointer, Type, Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)
threshold(Image, Region, 0, 150)
connection(Region, ConnectedRegions)
*填充
fill_up(ConnectedRegions, RegionFillUp)
*其中参数and的意思是指Features(特征)可以组合在一起
select_shape (RegionFillUp, SelectedRegions, ['area', 'circularity'], 'and', [1000,0.95], [5000,1.00])
dev_display(Image)
dev_display(SelectedRegions)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值