工控编程吧
标题:
2.3 halcon通过带扫描线识别条形码
[打印本页]
作者:
qq263946146
时间:
2019-3-20 21:47
标题:
2.3 halcon通过带扫描线识别条形码
在扫描条形码时,可以在事先确定的条码矩形区域内,通过设置多条扫描线进行条码识别。
每条扫描线扫描的结果都相同才表示扫码成功。
当前实例实现 使用最少两条扫描线识别条形码功能。
代码和注释如下:
(, 下载次数: 0)
上传
点击文件名下载附件
dev_close_window()
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_draw ('margin')
dev_update_window ('off')
dev_set_line_width (2)
Files := ['ean1314','ean1313']
*创建条形码模型句柄。
create_bar_code_model ([], [], BarCodeHandle)
*设置要查找的条码的最小宽度参数,也就是黑色和白色矩形 条沿着扫描方向的最小宽度
set_bar_code_param (BarCodeHandle, 'element_size_min', 1.5)
*设置要查找条码的解码过程的中间结果是否保存,1是,0,否。
set_bar_code_param (BarCodeHandle, 'persistence', 1)
*设置最少使用两条扫描线进行计算,结果相同才认为结果正确
set_bar_code_param (BarCodeHandle, 'min_identical_scanlines', 2)
for I :=0 to |Files|-1 by 1
Filename := 'barcode/ean13/'+Files[I]
read_image (Image, Filename)
get_image_size (Image, Width, Height)
dev_set_window_extents(0,0,Width, Height)
dev_display (Image)
*在图片中开始查找条码,字符结果保存在DecodedDataStrings,条码区域保存在SymbolRegions
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
if(|DecodedDataStrings|)
CandidatesIds := [0:|DecodedDataStrings|-1]
else
CandidatesIds := 'all'
endif
*获取条码计算的中间结果:条码区域
get_bar_code_object(Candidates, BarCodeHandle, CandidatesIds, 'candidate_regions')
dev_set_color ('green')
dev_display (Candidates)
*获取条码计算的中间结果:扫描线
get_bar_code_object(ValidScanLines, BarCodeHandle, CandidatesIds, 'scanlines_valid')
dev_set_color ('yellow')
dev_display (ValidScanLines)
if(I<|Files|)
disp_continue_message(WindowHandle, 'black', 'true')
stop()
endif
endfor
clear_bar_code_model (BarCodeHandle)
复制代码
一维码识别相关函数也就16个。
(, 下载次数: 1)
上传
点击文件名下载附件
可按下F1,结合手册查阅这些函数,
下面是结合代码,一步步执行查看每个函数的执行效果。
从而熟悉每个函数的作用与使用场景。
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*读取图片,用于条码识别
read_image (Image, 'barcode/mixed/barcode_mixed_02')
dev_display (Image)
*创建条码模型句柄,用于后面条码识别
create_bar_code_model ([], [], BarCodeHandle)
*设置条码识别过程中,中间变量是否保留,1保留,0不保留,为1时下面get_bar_code_object才有效
set_bar_code_param (BarCodeHandle, 'persistence', 1)
*执行条码查找,结果字符串保存在DecodedDataStrings,条码所在区域保存在SymbolRegions
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
*获取条码识别过程中的中间变量:扫描线;
get_bar_code_object (Scallines, BarCodeHandle, 'all', 'scanlines_valid')
*获取条码识别的设置参数。和set_bar_code_param对应。
get_bar_code_param (BarCodeHandle, 'persistence', GenParamValue)
*获取所有可以在get_bar_code_param和set_bar_code_param函数中使用的条码参数
query_bar_code_params (BarCodeHandle, 'all', GenParamName)
*将条码句柄(包含设置信息)保存到磁盘,供后期读取使用。
write_bar_code_model (BarCodeHandle, 'bar_code_model.bcm')
*清静条码句柄,释放内存资源。
clear_bar_code_model (BarCodeHandle)
*从事先 保存的文件读取条码句柄,并进行读码操作。
read_bar_code_model('bar_code_model.bcm', BarCodeHandle)
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
get_bar_code_object (Scallines, BarCodeHandle, 'all', 'scanlines_valid')
*串行化条码句柄(包含设置信息),并保存到磁盘.
serialize_bar_code_model (BarCodeHandle, SerializedItemHandle)
open_file('123.bin','output_binary',FileHandle)
fwrite_serialized_item (FileHandle, SerializedItemHandle)
close_file (FileHandle)
clear_bar_code_model (BarCodeHandle)
*从磁盘读取事先串行化的文件到条码句柄,并进行条码识别;
open_file('123.bin','input_binary',FileHandle)
fread_serialized_item (FileHandle, SerializedItemHandle)
deserialize_bar_code_model (SerializedItemHandle, BarCodeHandle)
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
get_bar_code_object (Scallines, BarCodeHandle, 'all', 'scanlines_valid')
*获取成功解码后的一些信息,如条码类型decoded_types,条码字符串decoded_strings
get_bar_code_result (BarCodeHandle, 'all', 'decoded_strings', BarCodeResults)
*为指定类型的条码设置参数
set_bar_code_param_specific (BarCodeHandle, ['EAN-13','Code 39'] ,'orientation', [90.0,0.0])
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
*获取指定类型条码的参数
get_bar_code_param_specific (BarCodeHandle, ['EAN-13','Code 39'], 'orientation_tol', GenParamValue)
dev_display(Image)
Row:=475
Column:=465
Phi:=0.07
Length1:=265
Length2 :=80
*在图片指定区域内读取条码。
decode_bar_code_rectangle2 (Image, BarCodeHandle, 'Code 39', Row, Column, Phi, Length1, Length2, DecodedDataStrings)
*当读取的条码类型是Code 32时,其结果可用此函数转换为Code 39类型字符串。
convert_decoded_string_code39_to_code32(DecodedDataStrings, ConvertedDataStringCode32)
复制代码
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4