halcon采样与简单的处理
资源准备
1、安装halcon
2、摄像机设备,如果笔记本自带camera也可以。或者从视频文件中获取视频进行处理也可以
采样代码生成
打开“助手”——“打开新的ImageAcquisition”
编辑代码
* Image Acquisition 01: Code generated by Image Acquisition 01 * 打开图像采集接口 open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] Microsoft® LifeCam HD-5000', 0, -1, AcqHandle) grab_image_start (AcqHandle, -1) * 获取第一帧图像,主要是为了获取图像的大小 grab_image (ImageBase, AcqHandle) * 获取图像的大小 get_image_size(ImageBase,Width,Height) * 创建新的显示窗口 dev_open_window(0,0,Width/2, Height/2, 'black',WindowHandle) * 采样循环 while (true) * 获取图像 grab_image (Image, AcqHandle) * 显示采样的图像 dev_display(Image) *将图像转换为单通道的灰度图像 rgb1_to_gray(Image, GrayImage) dev_display(GrayImage) * 使用阈值处理,获取较暗部分 threshold(GrayImage, DarkArea, 0, 80) * 填充区域 fill_up(DarkArea, RegionFillUp) * 将不相连的区域整体分割成独立的区域 connection(RegionFillUp, ConnectedRegions) * 排除杂点,选择面积较大的区域 select_shape(ConnectedRegions, SelectedRegions, 'area','and',150, 9999) * 目标计数 count_obj(SelectedRegions, Number) * 设置文字颜色 dev_set_color('black') * 设置文字的显示位置 set_tposition(WindowHandle, 50,50) * 窗口输出文字 write_string(WindowHandle, Number) *设置联通区域的颜色为红色,这里跟上面的文字颜色是什么区别?是怎么知道要设置连通域的呢? dev_set_color('red') * 显示模式为填充 dev_set_draw('fill') //dev_display(DarkArea) * Image Acquisition 01: Do something endwhile close_framegrabber (AcqHandle) |
结果
总结
- halcon具备丰富的算子和函数接口
- 图像变量窗口:在图像处理过程中,我们希望看到图像的变化过程,halcon提供了图像变量窗口,在这个窗口下可以一目了然的看到图像在处理过程中的演化过程,能够帮助我们快速定位处理过程中的问题,非常好用的一个功能
参考书籍
《机器视觉算法原理与编程实战》