halcon的一维码与二维码的识别

一维码、二维码在生活中经常看到,如下图:
在这里插入图片描述
现在就开始用halcon做个实时采集识别吧!

  1. 一维码识别
    点击助手打开新的Image Acquisition,然后检查相机连接设备和设置参数后插入代码,代码如下:
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[1] ', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
    grab_image_async (Image, AcqHandle, -1)
endwhile
close_framegrabber (AcqHandle)

上述是图像实时采集代码,接下来做的是创建一维码模型、识别模型、显示识别结果。第一步,创建一维码模型,即在启动图像采集代码(grab_image_start (AcqHandle, -1))下插入。代码如下:

create_bar_code_model ([], [], BarCodeHandle)

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_draw ('margin')    //设置区域填充模式为边缘
dev_set_line_width (1)    //定义区域轮廓输出的线宽。

create_bar_code_model算子为创建一维码模型,最后一个参数为模型句柄,在识别模型时用到该模型句柄,不然就找不到创建的模型。dev_set_draw 算子和dev_set_line_width算子是设置一个矩形框,这样就能将采集到的一维码框起来。
第二步,识别一维码模型,即在循环代码中插入代码。代码如下:

    set_bar_code_param (BarCodeHandle, 'element_size_min', 8)
    find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)

set_bar_code_param算子为设置一维码模型参数,这里设置为element_size_min,即基本条形码元素的最小尺寸,此设置激活参数’element_size_min的训练模式,低于该值=8,将检测不到一维码模型。
find_bar_code算子为查找一维码模型,参数auto为自动检测模型。
第三步,显示结果,在识别模型下插入代码,代码如下:

    dev_set_color ('green')
    dev_display (Image)
    disp_message (WindowHandle, DecodedDataStrings, 'window', 12, 12, 'black', 'true')

dev_set_color算子为设置输出颜色,这里设置为绿色。 dev_display 算子为显示采集图像。 disp_message算子为显示文本消息,参数DecodedDataStrings为解码的内容,在查找模型算子里已经解码,参数black为显示文本的颜色,设置为黑色。
最后一步,清空模型,在程序的最后插入代码,代码如下:

clear_bar_code_model (BarCodeHandle)

至此完成实时识别一维码的要求。

  1. 二维码识别
    其步骤与一维码类似,这里就不重复。不同的是创建二维码模型的算子create_data_code_2d_model与查找二维码模型的算子 find_data_code_2d,完整代码如下:
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[1] ', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
*创建二维码模型
create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_draw ('margin')    //设置边缘
dev_set_line_width (1)     //设置线宽
while (true)
    grab_image_async (Image, AcqHandle, -1)
    *寻找模型
    find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
    get_image_size (Image, Width, Height)
    *显示
    dev_set_color ('blue')
    dev_display (Image)
    disp_message (WindowHandle, DecodedDataStrings, 'window', 12, 12, 'black', 'true')
endwhile
close_framegrabber (AcqHandle)
clear_data_code_2d_model (DataCodeHandle)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值