首页 > 其他分享 >使用halcon完成一维码、二维码的识别

使用halcon完成一维码、二维码的识别

时间:2024-11-11 19:18:46浏览次数:3  
标签:code bar 句柄 Image halcon 二维码 BarCodeHandle 参数 一维

图片素材 

通过网盘分享的文件:图片5
链接: https://pan.baidu.com/s/1r9SG4lZ3ZQ5S-NGVsFx70w?pwd=BFDJ 提取码: BFDJ

读码

一维码

创建读码句柄

create_bar_code_model ([], [], BarCodeHandle)

参数一:输入通用参数可以调整条形码模型的名称。

参数二:通用参数可以调整条形码模型值。

参数三:返回的条形码模板句柄

设置读码参数

set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 1)

参数一:输入的图像

参数二:参数模型

参数三:对应参数二的设定值

'element_size_min'条码的最小尺寸,指条码宽度和间距,大码应设大一点,减少处理时间
'element_size_max'条码的最大尺寸,不能过小也不能过大
'check_char'是否验证校验位,'absent'不检查校验和,'present'检查校验和
'persistence'设置为1,则会保留中间结果,评估条码印刷质量时会用到
'num_scanlines'解码时所用扫描线的最大数目,设置为0表示自动确定,一般设置为2-30
'start_stop_tolerance'容许误差值,可设置为'low'或者'high',设置为'high'可能造成误判
'orientation'、'orientation_tol'分别指条码的方向和方向容差,设置准确可大大提高解码效率
'element_height_min'条码的最小高度,默认值-1表示自动推测条码高度,该参数对速度影响大
'stop_after_result_num'设置要解码的个数,0表示全部找出,设置为2表示找到2个就不找了

查找一维码

find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)

参数一,二:输入的图像,输出的区域

参数三,四:输入的模板句柄,输入条形码的码制

参数五:返回所有成功解码的条码数据字符串

获取码制

get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)

参数一:输入的图像

参数二:识别的数量

参数三:用于指定希望获取的条形码类型

参数四:输出的码制

清理读码句柄

clear_bar_code_model (BarCodeHandle)

参数一:条形码模板句柄

拓展

set_bar_code_param :设置解码时的参数 decode_bar_code_rectangle2 :在指定的矩形区域内解码 get_bar_code_param :获取解码时的参数(如果没有设置过,则获得的是默认值) get_bar_code_result :获得解码后的结果,例如可以获得条码类型(Code 128、Code 39等等) get_bar_code_object :获得解码时的一些对象,例如可以获得解码后的条码区域

代码练习 

识别多个一维码

set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 3)识别多个一维码,参数可以使用'stop_after_result_num',设置要解码的个数,0表示全部找出,设置为2表示找到2个就不找了

read_image (Image, 'D:/VScode/HALCON/image/图片5/一维码/一维码/barcode_mixed_01 - 副本.png')

*创建读码句柄
create_bar_code_model ([], [], BarCodeHandle)
*设置读码参数
set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 0)
*查找一维码
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
**获取码制
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
*清理读码句柄
clear_bar_code_model (BarCodeHandle)

 

识别有缺陷的一维码 

set_bar_code_param (BarCodeHandle, 'start_stop_tolerance', 'high')识别有缺陷的一维码时,可以使用'start_stop_tolerance'参数,容许误差值,可设置为'low'或者'high',设置为'high'可能造成误判

*********缺陷一维码     
dev_set_draw ('margin')    
* Image Acquisition 05: Code generated by Image Acquisition 05
list_files ('D:/VScode/HALCON/image/图片5/一维码/缺陷一维码', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    * Image Acquisition 05: Do something
    create_bar_code_model ([], [], BarCodeHandle)
    
    set_bar_code_param (BarCodeHandle, 'start_stop_tolerance', 'high')
    *查找一维码
    find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
    
    get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
    
    area_center (SymbolRegions, Area, Row, Column)
    
    dev_get_window (WindowHandle)
    disp_message (WindowHandle, DecodedDataStrings, 'image', Row, Column, 'red', 'true')
    
     *清理读码句柄
    clear_bar_code_model (BarCodeHandle)
    stop ()
endfor

 

二维码

创建读码句柄

create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)

参数一:输入你要读取的二维码的码制

参数二:通用参数可以调整为二维码数据模型的名称

参数三:通用参数可以调整为二维码数据模型的价值

参数四:返回二维码模板句柄

设置读码参数

set_data_code_2d_param (DataCodeHandle, 'default_parameters', 'maximum_recognition')

参数一:输入的图像句柄

参数二:设置识别的模式

一般情况下设置:

timeout超时时间 ms
default_parameters识别模式
symbol_size_min最小字符size
module_size_min最小像素值
module_width_min最小宽度
拓展

default_parameters有3种识别模式识别模式越强,适应场合越广,适应能力和识别能力越强,但耗时越多

standard_recognition 标准模式

enhanced_recognition 加强模式

maximum_recognition 最强模式

查找二维码

find_data_code_2d (Image, SymbolXLDs,DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)

参数一:输入的图像

参数二:输出的二维码边缘轮廓线

参数三:句柄

参数四:查找模式。默认是空的,直接查找

参数五:对应查找模式的参数。如果是’stop_after_result_num’,表示检测完后可以返回多少个二维码的结果,对应的GenParamValue可以设置0-n 如果是‘train’,就是边找边调整模板参数,对应的也有很多参数: ‘all’, ‘model_type’, ‘symbol_size’

参数七:输出二维码信息

清理读码句柄

clear_data_code_2d_model(DataCodeHandle)

代码练习

码制为'QR Code'的二维码

create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)第一个参数需要更改为对应的二维码码制。

识别模式可以使用最强模式。

read_image (Image, 'D:/VScode/HALCON/image/图片5/二维码/qrcode/qr_milk_carton.png')

create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)
**识别模式 最强
set_data_code_2d_param (DataCodeHandle, 'default_parameters', 'maximum_recognition')

find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings1)

area_center_xld (SymbolXLDs, Area1, Row1, Column1, PointOrder)

dev_get_window (WindowHandle)
disp_message (WindowHandle, DecodedDataStrings1, 'image', Row1, Column1, 'red','true')

clear_data_code_2d_model (DataCodeHandle)

 码制为'Micro QR Code'的二维码
****** 读取二维码 Micro QR Code
* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('D:/VScode/HALCON/image/图片5/二维码/micro_qr', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    * Image Acquisition 01: Do something
    
    create_data_code_2d_model ('Micro QR Code', [], [], DataCodeHandle)
      **识别模式 最强
    set_data_code_2d_param (DataCodeHandle, 'default_parameters', 'maximum_recognition')

     find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings1)

     area_center_xld (SymbolXLDs, Area1, Row1, Column1, PointOrder)

     dev_get_window (WindowHandle)
     disp_message (WindowHandle, DecodedDataStrings1, 'image', Row1, Column1, 'green','true')

     clear_data_code_2d_model (DataCodeHandle)
     stop ()
endfor

注意事项

每次代码的最后都需要清理读码句柄

一维码:clear_bar_code_model (BarCodeHandle)

二维码:clear_data_code_2d_model(DataCodeHandle)

标签:code,bar,句柄,Image,halcon,二维码,BarCodeHandle,参数,一维
From: https://blog.csdn.net/m0_70785017/article/details/143692938

相关文章

  • C小题目:有一个一维数组score,放10个学生的成绩,求平均成绩。
    #include<stdio.h>intaverage(intx[],intlen){inti,sum=0;for(i=0;i<len;i++){sum+=x[i];printf("%d\n",x[i]);};inta=sum/len;printf("theaverageis%d\n",a);};intmain(){......
  • Halcon 灰度形态学及太阳能电池片缺陷检测应用
    一、基本概念        Halcon灰度形态学是图像处理领域中的一种重要技术,它允许对图像中的灰度值进行非线性操作,这些操作取决于像素的邻域。        灰度形态学是形态学的一种推广,与二值形态学相比,它不仅在图像本身的空间尺寸上有所变化,而且图像本身的灰度值也......
  • halcon中将xld轮廓或者region区域绘制在图像上并保存
    1)单通道图像的绘制draw_circle(WindowHandle,Row,Column,Radius)gen_circle(Circle,Row,Column,Radius)paint_region(Circle,Image,ImageR,0,'fill')paint_region(Circle,Image,ImageG,255,'fill')paint_region(Circle,Image,ImageB,......
  • Java入门程序之一维数组的基础运用
    Java入门程序之一维数组的基础运用​本文详细介绍了Java中数组的概念、创建与初始化、一维数组的使用、内存分布以及二维数组。讲解了数组的静态与动态初始化、元素访问与修改、遍历方式。一、数组的基本概念数组的初始化例如:int[]array1=newint[20];//创建一个......
  • Halcon 矫正图像 图像矫正
    目录1、图像预处理和形状校正2、源码 1.原图2.矫正后的图像3.示例代码         在图像处理领域中,Halcon是一种广泛使用的编程语言和库,它提供了丰富的图像处理功能。本文将详细解析一段Halcon代码,这段代码主要用于图像处理和形状校正。代码分为两部分,本文将逐......
  • Halcon刚性变换
       刚性仿射变换(RigidAffineTransformation)是一种机械视觉和图像处理常用的技术,通常用于在保持物体形状和大小不变的情况下,对物体进行旋转和平移。常见于模板匹配,定位跟随等场景。1:vector_angle_to_rigid(::Row1,Column1,Angle1,Row2,Column2,Angle2:HomMat......
  • Html5QRCode扫描条形码+二维码
    代码:<html><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width,initial-scale=1.0"&......
  • c语言一维数组
    一维数组数组的目的主要是为了解决在编程中需要存储和处理多个相同类型数据的问题。#include<stdio.h>intmain(){intarr[5]={1,2,3,4,5};//定义一个一维数组for(inti=0;i<5;i++){//使用for循环遍历数组printf("%d",arr[i]);//打......
  • Halcon 二维码识别
        二维条形码(2-DimensionalBarCode)在水平和竖直方向的二维空间存储信息,其特点是信息容量大、安全性强、保密性高(可加密)、识别率高、编码范围广等。除此之外,二维条形码还可将汉字、图像等信息进行优化编码处理具有全方位识别,并可引入加密机制的功能。因此,二维条形码......
  • 7-5 一维数组按规律输出。
    分数10作者苑丽红单位长春理工大学从键盘输入n个整数,将这n个整数按给定的规律输出。建议一维数组实现。输入格式:先输入n的值。再另起一行输入n个元素,空格分隔。输出格式:输出n行数据。数据的规律见输出样例。(共n行。第i行,从所给定数据的第i个开始,顺序输出给定的所......