*视觉_创建一维码检测模型
create_bar_code_model ('quiet_zone', 'true', BarCodeHandle)
*视觉_设置一维码检测模型参数
set_bar_code_param (BarCodeHandle, 'majority_voting', 'true')
set_bar_code_param (BarCodeHandle, 'element_size_variable', 'true')
set_bar_code_param (BarCodeHandle, 'start_stop_tolerance', 'low')
* 视觉_打开相机
open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '34bd20506e13_Hikrobot_MVCS20010GC', 0, -1, AcqHandle)
set_framegrabber_param (AcqHandle, 'color_space', 'gray')
grab_image_start (AcqHandle, -1)
*视觉_启动抓取图像
while (true)
grab_image_async (Image, AcqHandle, -1)
* Image Acquisition 01: Do something
*寻找一维码
*视觉_获取图像尺寸
concat_obj (Image, Image, ObjectsConcat)
*视觉_获取图像尺寸
* 图像增强和去噪
*emphasize(Image, ImageEmphasize, 7, 7, 1)
*median_image (Image, ImageFiltered, 'square', 1, 'mirrored')
get_image_size (Image, Width, Height)
*视觉_设置窗口局部显示
*set_part (0, 0, 511, 511)
*dev_set_part (0, 0, 511, 511)
*视觉_显示对象
*disp_obj (ObjectsConcat, [H2D69460])
*显示条码区域
*dev_display (SymbolRegions)
*视觉_寻找一维码
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'Code 128', DecodedDataStrings)
* while (true)
* dev_display (SymbolRegions)
*endwhile
endwhile
*close_framegrabber (AcqHandle)
这段代码是一个用于检测一维码的HALCON视觉程序。它包括了创建和配置一维码检测模型、打开相机、抓取图像以及在一维码检测过程中的一些处理步骤。以下是代码的详细解释:
1. **创建一维码检测模型**:
```hdevelop
create_bar_code_model ('quiet_zone', 'true', BarCodeHandle)
```
这行代码创建了一个一维码检测模型,并启用了“安静区域”选项(`quiet_zone`),这意味着在条码周围需要有一定的空白区域,以便于更准确地检测条码。
2. **设置一维码检测模型参数**:
```hdevelop
set_bar_code_param (BarCodeHandle, 'majority_voting', 'true')
set_bar_code_param (BarCodeHandle, 'element_size_variable', 'true')
set_bar_code_param (BarCodeHandle, 'start_stop_tolerance', 'low')
```
这些命令设置了条码检测模型的各种参数:
- `majority_voting`: 启用多数投票机制以提高检测准确性。
- `element_size_variable`: 允许条码元素大小变化。
- `start_stop_tolerance`: 设置起始和停止符的容差为低,意味着对起始和停止符的识别更加严格。
3. **打开相机并配置图像采集**:
```hdevelop
open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '34bd20506e13_Hikrobot_MVCS20010GC', 0, -1, AcqHandle)
set_framegrabber_param (AcqHandle, 'color_space', 'gray')
grab_image_start (AcqHandle, -1)
```
这部分代码做了以下几件事:
- 打开一个GigEVision2协议的相机,并获取其句柄`AcqHandle`。
- 设置相机的颜色空间为灰度模式。
- 开始从相机抓取图像。
4. **主循环:持续抓取和处理图像**:
```hdevelop
while (true)
grab_image_async (Image, AcqHandle, -1)
get_image_size (Image, Width, Height)
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'Code 128', DecodedDataStrings)
endwhile
```
在这个无限循环中,程序不断地执行以下操作:
- 异步抓取一张图像到变量`Image`中。
- 获取图像的尺寸,存储在`Width`和`Height`变量中。
- 使用之前创建的一维码检测模型,在图像中查找类型为Code 128的一维码,并将结果存储在`SymbolRegions`和`DecodedDataStrings`中。
5. **关闭相机**:
```hdevelop
close_framegrabber (AcqHandle)
```
当程序结束时,这行代码会关闭之前打开的相机。
需要注意的是,代码中的注释部分似乎有一些重复或未完成的内容,比如关于图像增强和去噪的部分被注释掉了。此外,一些显示对象的命令也被注释掉了,因此这些功能目前没有启用。
如果你希望继续开发和完善这个程序,可以根据具体需求取消某些注释,或者添加新的功能来优化条码检测过程。

1490

被折叠的 条评论
为什么被折叠?



