Blob分析案例(硬币检测)

Blob分析案例(硬币检测)

本案例是对硬币进行识别,使用halcon。实现的效果和代码如下。

1 效果

经过灰度化后的图像,如图所示:
Blob分析案例(硬币检测)_第1张图片
经过Blob分析,最终得到的结果如下图所示,能够很好的找到硬币所在的区域,并获取面积和坐标,这个是针对像素点的面积。
Blob分析案例(硬币检测)_第2张图片

2 代码实现

* 案例:硬币识别
* 连接相机
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'gray', -1, 'false', 'default', '[0] USB2.0 PC CAMERA', 0, -1, AcqHandle)
* 开启相机
grab_image_start (AcqHandle, -1)

* 关闭窗口
dev_close_window ()
* 打开窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
while (true)
    * 抓取图像
    grab_image_async (Image, AcqHandle, -1)
    * 预处理,中值滤波
    median_image (Image, ImageMedian, 'circle', 1, 'mirrored')
    * 二值化
    threshold (Image, Regions, 144, 254)
    * 二值化以后,得出来的结果会噪点,使用形态学把噪点去掉
    * 因为硬币是圆形的,所以使用圆形结构元素进行处理,所以结构元素的半径越大,
    * 开运算去掉的强度越强,也可以使用腐蚀,但是腐蚀去掉像素点的强度比开运算强
    opening_circle (Regions, RegionOpening, 6)
    * 经过处理后用孔洞,需要进行填充
    fill_up (RegionOpening, RegionFillUp)
    * 切分成不同的连通区域
    connection (RegionFillUp, ConnectedRegions)
    * 打开特征直方图工具进行特征选取,对于硬币的选取,只需要使用圆度和面积就可以把硬币选出
    select_shape (ConnectedRegions, SelectedRegions, ['area','circularity'], 'and', [6977.74,0.40497], [50000,1])
    * 面积和坐标
    area_center (SelectedRegions, Area, Row, Column)
    * 显示
    disp_message (WindowHandle, '面积: ' + Area + '坐标:(' + Row + ',' + Column + ')', 'window', Row-150, Column-150, 'black', 'true')
endwhile
* 关相机
close_framegrabber (AcqHandle)

你可能感兴趣的:(计算机视觉,人工智能)