计算机视觉|Blob分析案例(硬币检测)

Blob分析案例(硬币检测) 本案例是对硬币进行识别,使用halcon。实现的效果和代码如下。
1 效果 【计算机视觉|Blob分析案例(硬币检测)】经过灰度化后的图像,如图所示:
计算机视觉|Blob分析案例(硬币检测)
文章图片

经过Blob分析,最终得到的结果如下图所示,能够很好的找到硬币所在的区域,并获取面积和坐标,这个是针对像素点的面积。
计算机视觉|Blob分析案例(硬币检测)
文章图片

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)

    推荐阅读