需求分析 -- 条形码读取
条形码是一种由黑白相间的条纹组成的图案,其中黑色部分称为"条",白色的称为"空"。条和空分别用来代表0或1,从而不同粗细条纹间的相互组合,便代表了不同的编码信息。由于条形码只使用水平方向来存储信息,因此,也可称之为"一维码"。
扫描原理
条形码的扫描需要扫描器,扫描器利用自身光源照射条形码,再利用光电转换器接受反射回来的光线,将反射光线的明暗转换成数字信号。不论是采取何种规则印制的条形码,都由静区、起始字符、数据字符与终止字符这几部分组成,有些条码在数据字符与终止字符之间还有校验字符。
算法分析
实例的任务是利用图像进行读取多个条形码,条形码采用的是在包装和其它种类的产品描述中非常流行的39码。通过调用HALCON运算返回图像中给定类型的条形码,在每一个寻找到条形码的区域,分别进行解码,显示结果。
gen_1d_bar_code_descr ( 'code 39', 6, 12, BarCodeDescr)
find_1d_bar_code_region (image, CodeRegion, BarCodeDescr, [], [],Orientation)
fori:=1toNumberby1ObjectSelected:=CodeRegion[i]
reduce_domain(image,ObjectSelected,ImageReduced)
get_1d_bar_code(ImageReduced,BarCodeDescr,[],[],Orientation[i-1],BarCode)
decode_1d_bar_code (BarCode, BarCodeDescr, Characters, Reference,IsCorrect)
endfor
需求分析 -- 读取二维码
二维码是用某种特定的几何图形按一定规律在平面分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的"0"、"1"比特流的概念。使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。
算法分析
实例任务读取铭刻在芯片上的ECC200型号二维码,通过设置最优的参数从而能够有效的读取数据码。实例中印在芯片上的码总是在黑暗中明亮并且模块的尺寸和数量都已经给出,对比度也在预知的范围内。给定模型参数值后,程序的执行速度可以大大提高。
create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
set_data_code_2d_param (DataCodeHandle,['module_size_min','module_size_max'], [4,7])
set_data_code_2d_param (DataCodeHandle, 'module_gap', 'no')
set_data_code_2d_param (DataCodeHandle, 'polarity', 'light_on_dark')
set_data_code_2d_param (DataCodeHandle, 'mirrored', 'no')
set_data_code_2d_param (DataCodeHandle, 'contrast_min', 10)
set_data_code_2d_param (DataCodeHandle, 'symbol_size', 18)
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)