这个程序演示了条形码扫描线的可视化。这种可视化可用于检查图像质量,其中遮挡或打印缺陷可能会阻止条形码阅读器成功解码底层条形码。
使用“扫描线_all”条形码阅读器可以读取的所有扫描线,最终用于解码候选条形码(此处为红色)。使用“扫描线_valid”可以可视化所有可以解码的扫描线,还有(这里用绿色表示)
总代码:
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
*
Files := ['ean1314','ean1313','ean13_defect_05']
Color := ['magenta','red','green','yellow']
*
*创建条形码阅读器
create_bar_code_model ([], [], BarCodeHandle)
*将持久模式下的模型设置为1,使其在条形码解码期间存储一些中间结果。
set_bar_code_param (BarCodeHandle, 'persistence', 1)
*
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)
* 寻找二维码
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'EAN-13', DecodedDataStrings)
* Display only scanlines of the decoded candidate region.
*仅显示解码候选区域的扫描线
if (|DecodedDataStrings|)
CandidateIds := [0:|DecodedDataStrings| - 1]
else
CandidateIds := 'all'
endif
* 得到中间结果
get_bar_code_object (Candidates, BarCodeHandle, CandidateIds, 'candidate_regions')
dev_set_line_width (4)
dev_set_color (Color[0])
dev_display (Candidates)
* 得到所有的扫描线
get_bar_code_object (AllScanlines, BarCodeHandle, CandidateIds, 'scanlines_all')
dev_set_color (Color[1])
dev_display (AllScanlines)
* 得到有效的扫描线
get_bar_code_object (ValidScanlines, BarCodeHandle, CandidateIds, 'scanlines_valid')
dev_set_line_width (2)
dev_set_color (Color[2])
dev_display (ValidScanlines)
*
get_bar_code_object (MergedScanlines, BarCodeHandle, CandidateIds, 'scanlines_merged_edges')
dev_set_color (Color[3])
dev_display (MergedScanlines)
*
disp_message (WindowHandle, 'Decoded data string: ' + DecodedDataStrings, 'window', 12, 12, 'black', 'true')
disp_message (WindowHandle, ['Candidate region','Extracted scanlines','Valid scanlines','Edges used for merging'], 'window', 42, 12, Color, ['black','false'])
if (I < |Files| - 1)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
endfor
clear_bar_code_model (BarCodeHandle)
逐段分析:
*更新窗口为off状态
dev_update_off ()
dev_close_window ()
*关闭窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
* 定义文件以及颜色
Files := ['ean1314','ean1313','ean13_defect_05']
Color := ['magenta','red','green','yellow']
*创建条形码阅读器
create_bar_code_model ([], [], BarCodeHandle)
*将持久模式下的模型设置为1,使其在条形码解码期间存储一些中间结果。
set_bar_code_param (BarCodeHandle, 'persistence', 1)
*循环读取图片
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)
* 寻找二维码
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'EAN-13', DecodedDataStrings)
*仅显示解码候选区域的扫描线
if (|DecodedDataStrings|)
CandidateIds := [0:|DecodedDataStrings| - 1]
else
CandidateIds := 'all'
endif
*得到中间结果--candidate_regions--候选地区
get_bar_code_object (Candidates, BarCodeHandle, CandidateIds, 'candidate_regions')
dev_set_line_width (4)
dev_set_color (Color[0])
dev_display (Candidates)
* 得到所有的扫描线
get_bar_code_object (AllScanlines, BarCodeHandle, CandidateIds, 'scanlines_all')
*设置扫描线的颜色为红色
dev_set_color (Color[1])
dev_display (AllScanlines)
* 得到有效的扫描线
get_bar_code_object (ValidScanlines, BarCodeHandle, CandidateIds, 'scanlines_valid')
dev_set_line_width (2)
*设置扫描线的颜色为绿色
dev_set_color (Color[2])
dev_display (ValidScanlines)
* 扫描线_合并_边
get_bar_code_object (MergedScanlines, BarCodeHandle, CandidateIds, 'scanlines_merged_edges')
dev_set_color (Color[3])
dev_display (MergedScanlines)
*显示信息
disp_message (WindowHandle, 'Decoded data string: ' + DecodedDataStrings, 'window', 12, 12, 'black', 'true')
*通过数组来显示信息
disp_message (WindowHandle, ['Candidate region','Extracted scanlines','Valid scanlines','Edges used for merging'], 'window', 42, 12, Color, ['black','false'])
if (I < |Files| - 1)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
endfor
*释放条形码阅读器分配的内存
clear_bar_code_model (BarCodeHandle)