图片素材
通过网盘分享的文件:图片5
链接: https://pan.baidu.com/s/1r9SG4lZ3ZQ5S-NGVsFx70w?pwd=BFDJ 提取码: BFDJ
读码
一维码
创建读码句柄
create_bar_code_model ([], [], BarCodeHandle)
参数一:输入通用参数可以调整条形码模型的名称。
参数二:通用参数可以调整条形码模型值。
参数三:返回的条形码模板句柄
设置读码参数
set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 1)
参数一:输入的图像
参数二:参数模型
参数三:对应参数二的设定值
'element_size_min' | 条码的最小尺寸,指条码宽度和间距,大码应设大一点,减少处理时间 |
---|---|
'element_size_max' | 条码的最大尺寸,不能过小也不能过大 |
'check_char' | 是否验证校验位,'absent'不检查校验和,'present'检查校验和 |
'persistence' | 设置为1,则会保留中间结果,评估条码印刷质量时会用到 |
'num_scanlines' | 解码时所用扫描线的最大数目,设置为0表示自动确定,一般设置为2-30 |
'start_stop_tolerance' | 容许误差值,可设置为'low'或者'high',设置为'high'可能造成误判 |
'orientation'、'orientation_tol' | 分别指条码的方向和方向容差,设置准确可大大提高解码效率 |
'element_height_min' | 条码的最小高度,默认值-1表示自动推测条码高度,该参数对速度影响大 |
'stop_after_result_num' | 设置要解码的个数,0表示全部找出,设置为2表示找到2个就不找了 |
查找一维码
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
参数一,二:输入的图像,输出的区域
参数三,四:输入的模板句柄,输入条形码的码制
参数五:返回所有成功解码的条码数据字符串
获取码制
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
参数一:输入的图像
参数二:识别的数量
参数三:用于指定希望获取的条形码类型
参数四:输出的码制
清理读码句柄
clear_bar_code_model (BarCodeHandle)
参数一:条形码模板句柄
拓展
set_bar_code_param :设置解码时的参数 decode_bar_code_rectangle2 :在指定的矩形区域内解码 get_bar_code_param :获取解码时的参数(如果没有设置过,则获得的是默认值) get_bar_code_result :获得解码后的结果,例如可以获得条码类型(Code 128、Code 39等等) get_bar_code_object :获得解码时的一些对象,例如可以获得解码后的条码区域
代码练习
识别多个一维码
set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 3)识别多个一维码,参数可以使用'stop_after_result_num',设置要解码的个数,0表示全部找出,设置为2表示找到2个就不找了
read_image (Image, 'D:/VScode/HALCON/image/图片5/一维码/一维码/barcode_mixed_01 - 副本.png')
*创建读码句柄
create_bar_code_model ([], [], BarCodeHandle)
*设置读码参数
set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 0)
*查找一维码
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
**获取码制
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
*清理读码句柄
clear_bar_code_model (BarCodeHandle)
识别有缺陷的一维码
set_bar_code_param (BarCodeHandle, 'start_stop_tolerance', 'high')识别有缺陷的一维码时,可以使用'start_stop_tolerance'参数,容许误差值,可设置为'low'或者'high',设置为'high'可能造成误判
*********缺陷一维码
dev_set_draw ('margin')
* Image Acquisition 05: Code generated by Image Acquisition 05
list_files ('D:/VScode/HALCON/image/图片5/一维码/缺陷一维码', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
read_image (Image, ImageFiles[Index])
* Image Acquisition 05: Do something
create_bar_code_model ([], [], BarCodeHandle)
set_bar_code_param (BarCodeHandle, 'start_stop_tolerance', 'high')
*查找一维码
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
area_center (SymbolRegions, Area, Row, Column)
dev_get_window (WindowHandle)
disp_message (WindowHandle, DecodedDataStrings, 'image', Row, Column, 'red', 'true')
*清理读码句柄
clear_bar_code_model (BarCodeHandle)
stop ()
endfor
二维码
创建读码句柄
create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)
参数一:输入你要读取的二维码的码制
参数二:通用参数可以调整为二维码数据模型的名称
参数三:通用参数可以调整为二维码数据模型的价值
参数四:返回二维码模板句柄
设置读码参数
set_data_code_2d_param (DataCodeHandle, 'default_parameters', 'maximum_recognition')
参数一:输入的图像句柄
参数二:设置识别的模式
一般情况下设置:
timeout | 超时时间 ms |
---|---|
default_parameters | 识别模式 |
symbol_size_min | 最小字符size |
module_size_min | 最小像素值 |
module_width_min | 最小宽度 |
拓展
default_parameters有3种识别模式识别模式越强,适应场合越广,适应能力和识别能力越强,但耗时越多
standard_recognition 标准模式
enhanced_recognition 加强模式
maximum_recognition 最强模式
查找二维码
find_data_code_2d (Image, SymbolXLDs,DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
参数一:输入的图像
参数二:输出的二维码边缘轮廓线
参数三:句柄
参数四:查找模式。默认是空的,直接查找
参数五:对应查找模式的参数。如果是’stop_after_result_num’,表示检测完后可以返回多少个二维码的结果,对应的GenParamValue可以设置0-n 如果是‘train’,就是边找边调整模板参数,对应的也有很多参数: ‘all’, ‘model_type’, ‘symbol_size’
参数七:输出二维码信息
清理读码句柄
clear_data_code_2d_model(DataCodeHandle)
代码练习
码制为'QR Code'的二维码
create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)第一个参数需要更改为对应的二维码码制。
识别模式可以使用最强模式。
read_image (Image, 'D:/VScode/HALCON/image/图片5/二维码/qrcode/qr_milk_carton.png')
create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)
**识别模式 最强
set_data_code_2d_param (DataCodeHandle, 'default_parameters', 'maximum_recognition')
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings1)
area_center_xld (SymbolXLDs, Area1, Row1, Column1, PointOrder)
dev_get_window (WindowHandle)
disp_message (WindowHandle, DecodedDataStrings1, 'image', Row1, Column1, 'red','true')
clear_data_code_2d_model (DataCodeHandle)
码制为'Micro QR Code'的二维码
****** 读取二维码 Micro QR Code
* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('D:/VScode/HALCON/image/图片5/二维码/micro_qr', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
read_image (Image, ImageFiles[Index])
* Image Acquisition 01: Do something
create_data_code_2d_model ('Micro QR Code', [], [], DataCodeHandle)
**识别模式 最强
set_data_code_2d_param (DataCodeHandle, 'default_parameters', 'maximum_recognition')
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings1)
area_center_xld (SymbolXLDs, Area1, Row1, Column1, PointOrder)
dev_get_window (WindowHandle)
disp_message (WindowHandle, DecodedDataStrings1, 'image', Row1, Column1, 'green','true')
clear_data_code_2d_model (DataCodeHandle)
stop ()
endfor
注意事项
每次代码的最后都需要清理读码句柄