这个示例程序显示了条形码阅读器读取缺陷条形码的能力密码。这是通过人工移除条形码中不同程度的空格来实现的。该空间只是用一个对应于周围条形的灰色值进行了叠加。
总代码:
dev_update_pc ('off')
dev_update_window ('off')
dev_update_var ('off')
*读取图片
read_image (Image, 'barcode/code39/code3904')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_set_draw ('margin')
dev_set_color ('green')
dev_display (Image)
set_display_font (WindowHandle, 14, 'mono', 'false', 'false')
create_bar_code_model ([], [], BarCodeHandle)
for O := 5 to 24 by 5
for R := 79 to 141 by 5
*生成一个矩形
gen_rectangle1 (Rectangle, max([R - O,79]), 170, min([R + O,141]), 173)
*改变区域的灰度值,将区域绘制到图像中
paint_region (Rectangle, Image, ImageError, 6, 'fill')
*设置黑白条的最大像素为32
set_bar_code_param (BarCodeHandle, 'element_size_max', 32)
*寻找条形码
find_bar_code (ImageError, SymbolRegions, BarCodeHandle, 'Code 39', DecodedDataStrings)
*得到候选区域
get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'candidate_regions')
dev_display (ImageError)
dev_display (SymbolRegions)
if (|DecodedDataStrings| > 0)
disp_message (WindowHandle, DecodedDataStrings, 'image', 20, 10, 'black', 'true')
else
disp_message (WindowHandle, 'Undecodable', 'image', 20, 10, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
wait_seconds (0.2)
endfor
endfor
clear_bar_code_model (BarCodeHandle)
逐段分析:
*定义pc、窗口以及变量更新为off状态
dev_update_pc ('off')
dev_update_window ('off')
dev_update_var ('off')
*读取图片
read_image (Image, 'barcode/code39/code3904')
get_image_size (Image, Width, Height)
dev_close_window ()
*打开窗口
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_set_draw ('margin')
dev_set_color ('green')
dev_display (Image)
set_display_font (WindowHandle, 14, 'mono', 'false', 'false')
*创建条形码模型句柄
create_bar_code_model ([], [], BarCodeHandle)
*矩形的宽度增加
for O := 5 to 24 by 5
*小矩形的列坐标
for R := 79 to 141 by 5
*生成一个矩形
gen_rectangle1 (Rectangle, max([R - O,79]), 170, min([R + O,141]), 173)
*改变区域的灰度值,将区域绘制到图像中
*使得小矩形成为黑色
paint_region (Rectangle, Image, ImageError, 6, 'fill')
*设置黑白条的最大像素为32
set_bar_code_param (BarCodeHandle, 'element_size_max', 32)
*寻找条形码
find_bar_code (ImageError, SymbolRegions, BarCodeHandle, 'Code 39', DecodedDataStrings)
*得到候选区域
get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'candidate_regions')
dev_display (ImageError)
dev_display (SymbolRegions)
if (|DecodedDataStrings| > 0)
*显示解码后的结果
disp_message (WindowHandle, DecodedDataStrings, 'image', 20, 10, 'black', 'true')
else
*显示不能解码
disp_message (WindowHandle, 'Undecodable', 'image', 20, 10, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
wait_seconds (0.2)
endfor
endfor
*释放条形码阅读器分配的内存
clear_bar_code_model (BarCodeHandle)
主要算子解释:
paint_region(Region, Image : ImageResult : Grayval, Type : )
功能:改变区域的灰度值,将区域绘制到图像中。将区域中给定的区域以恒定的灰度值绘制到图像中给定的图像中,并在ImageResult中返回结果。
Region:要绘制到输入图像中的区域。
Image:要在其中绘制区域的图像。
ImageResult:包含结果的图像。
Grayval:区域所需的灰度值。
Type:绘制填充区域或作为边界。