检测一维码
read_image (Image, 'C:/Users/renre/Desktop/s8.bmp')
*设置图形对象的绘制模式为仅显示轮廓(边缘),不填充内部区域 填充为fill
dev_set_draw ('margin')
*设置后续绘制的图形颜色设置为绿色
dev_set_color ('green')
* 1 核心算子 创建一个条形码的模版
* 参数1 预留元组 写条形码的参数名字 可选参数名称(如解码类型等),默认空元组表示使用默认配置
* 参数2 预留元组 写条形码的参数值 对应参数值,支持动态调整以适配不同条码类型(如EAN-13、Code 128等) 默认空元组表示使用默认配置
* 参数3 BarCodeHandle 条形码实例对象
create_bar_code_model ([], [], BarCodeHandle)
* 2 核心算子设置模版参数
*通过element_size_min和element_size_max指定条码最小/最大宽度(单位:像素),
*影响候选区域搜索和解码精度,但非严格限制
set_bar_code_param (BarCodeHandle, 'barcode_width_min', 300) // 设置条形码宽度
set_bar_code_param (BarCodeHandle, 'barcode_height_min', 80) // 设置条形码高度
* 3 根据条形码模版找合适区域
*Image:待处理的输入图像
*BarCodeHandle:由 create_bar_code_model 创建的条码模型句柄,可通过 set_bar_code_param 调整解码参数
*'auto':指定条码类型为自动识别模式,支持多种类型但可能降低解码效率,建议明确类型(如 'EAN-13')以提高可靠性
* SymbolRegions:返回检测到的条码区域对象,可用于可视化或进一步分析
* DecodedDataStrings:存储解码后的条码数据字符串
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
* 4 获取条形码的具体信息
* all 获取所有已经解码的结果
* 'decoded_types' 指定要搜索结果的类型的可选项 获取条形码的类型 code128类型
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)get_bar_code_result (BarCodeHandle, 'all', 'decoded_strings', BarCodeResults1)
msg:=BarCodeHandle+':'+DecodedDataStrings
检测多张一维码
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('green')
* 1 创建条形码模型
create_bar_code_model ([], [], BarCodeHandle)
* 2 设置参数
set_bar_code_param (BarCodeHandle, 'barcode_width_min', 280)
set_bar_code_param (BarCodeHandle, 'barcode_height_min', 60)
* 3 加载多张图片
list_files ('C:/Users/renre/Desktop/img', 'files', Files)
*根据正则表达式筛选图片
tuple_regexp_select (Files, '.(jpg|bmp|png)', Selection)
* 4 遍历图片进行查询条形码
for i := 1 to |Selection|-1 by 1
dev_clear_window ()
* 获取图片
read_image (Image, Selection[i])
* 搜索条形码
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
tuple_find (DecodedDataStrings, DecodedDataStrings, Indices1)
text:=''
if (Indices1!=0)
text:='未找到一维码'
else
* 获取条形码信息
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
text:=BarCodeResults+':'+DecodedDataStrings
endif
*显示图片
dev_display (Image)
*显示检测区域
dev_display (SymbolRegions)
stop()
endfor
二维码检测
dev_get_window (WindowHandle)
dev_clear_window ()
*设置图形对象的绘制模式为仅显示轮廓(边缘),不填充内部区域 填充为fill
dev_set_draw ('margin')
*设置后续绘制的图形颜色设置为绿色
dev_set_color ('green')
*1创建Data Matrix ECC 200 或者
*default_parameters 默认参数
*maximum_recognition 最大识别度
create_data_code_2d_model ('Data Matrix ECC 200', ['default_parameters'], ['maximum_recognition'], DataCodeHandle)
*创建QRCode的模版
*create_data_code_2d_model ('QR Code', ['default_parameters'], ['maximum_recognition'], DataCodeHandle1)
*创建PDF417的模版
*create_data_code_2d_model ('PDF417', ['default_parameters'], ['maximum_recognition'], DataCodeHandle2)
*2设置模版参数
*'default_parameters':表示使用默认参数模板。
*'standard_recognition':解码模式为标准识别模式(平衡识别速度和鲁棒性)
set_data_code_2d_param (DataCodeHandle, 'default_parameters', 'standard_recognition')
*3 加载图片
read_image (Image, 'C:/Users/renre/Desktop/ecc200_print_quality_01.png')
*4匹配
*Image:待处理的输入图像(单通道或多通道)。
*DataCodeHandle:数据码模型句柄
*SymbolXLDs:返回检测到的数据码轮廓(XLD 对象)。
*ResultHandles:候选对象的句柄集合,用于后续查询详细属性(如通过 get_data_code_2d_results
*[], [],保留参数,通常用于扩展 默认为空即可
*ResultHandles 结果句柄 DecodedDataStrings 结果字符串
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
*获取匹配结果
*ResultHandles候选对象的句柄集合
*status'结果参数之一,用于获取候选对象的解码状态
*ResultValues输出参数,存储返回的结果值
get_data_code_2d_results (DataCodeHandle, ResultHandles, 'status', ResultValues)
dev_display (Image)
dev_display (SymbolXLDs)
*释放模版实例 避免内存泄漏
* clear_data_code_2d_model (DataCodeHandle2)
* clear_data_code_2d_model (DataCodeHandle1)
获取检测区域的中心
*获取图像
read_image (Image, 'fabrik')
*关闭窗口
dev_close_window ()
*打开窗口
dev_open_window (0, 0, 512, 512, 'black', WindowID)
*设置输出字体,14号字,Courier字体,粗体
set_display_font (WindowID, 14, 'mono', 'true', 'false')
*设置输出颜色
dev_set_colored (6)
*进行区域生长操作
*区域生长(Region Growing)图像分割算子,其功能是通过像素相似性将图像分割成连通区域
* mage:输入的单通道灰度图像,作为分割处理的源数据
*Regions:输出参数,存储分割后生成的区域集合
*Row=1, Column=1:定义邻域模板尺寸(奇数),表示检测像素的相邻范围为1×1,即直接比较4-邻域或8-邻域像素
*Tolerance=3:灰度差异阈值,当相邻像素灰度值差的绝对值≤3时合并为同一区域
*MinSize=200:输出区域的最小像素数,过滤掉面积小于200的候选区域
regiongrowing (Image, Regions, 1, 1, 3, 200)
*显示区域
dev_display (Regions)
*计算所有不相连区域的面积和中心点坐标
area_center (Regions, Area, Row, Column)
center:=|Area|
*指定窗口句柄和字符串内容,返回文本的布局参数
* WindowID:目标窗口的句柄,用于确定测量环境6。
*12345:待测量的字符串内容(示例中为数字字符串)6。
*Ascent:输出参数,表示字符基线到顶部的距离(上行高度)6。
*Descent:输出参数,表示字符基线到底部的距离(下行高度)6。
*TxtWidth:输出参数,返回字符串的总宽度(像素单位)6。
*TxtHeight:输出参数,返回字符串的总高度(像素单位)
get_string_extents (WindowID, 12345, Ascent, Descent, TxtWidth, TxtHeight)
*将面积计算结果以字符串形式显示在窗口中
for I := 0 to center-1 by 1
*WindowID:目标窗口句柄,指定文本渲染的图形窗口
*Area[I]:动态字符串数组,支持多行文本显示(数组元素自动换行)
*'image':坐标系模式,表示后续坐标参数基于图像像素而非窗口坐标系,适用于缩放图像场景。
*Row[I] - TxtHeight / 2:垂直居中定位,通过基准行坐标减去文本高度一半实现。
*Column[I] - TxtWidth / 2:水平居中定位,原理同垂直定位。
*'white':文本颜色参数,支持颜色名称或RGB值。
*'false':禁用橙色背景框(若需自定义框色可传入颜色字符串如'#FF00CC')
disp_message (WindowID, Area[I], 'image', Row[I] - TxtHeight / 2, Column[I] - TxtWidth / 2, 'white', 'red')
endfor