halcon学习笔记-一维码(条形码)检测
拿到图像,一般先要对图像做预处理,当然你的图像质量很高就可以不用做了。常用的方法有:
(1)scale_image,灰度图像灰度值缩放(很好用)
(2)emphasize,图像锐化,突出图像的轮廓(高频)部分
(3)zoom_image_factor,图像缩放
用到的基本算子有:
create_bar_code_model():创建一维码模型
GenParamName:设置一维码通用参数的的字段
GenParamValue:设置一维码通用参数的值(对应GenParamName)
BarCodeHandle:模型句柄
一般这个算子是不用改的,用默认的就行,reate_bar_code_model ([], [], BarCodeHandle),如果遇到特殊情况,也可以在后面的set_bar_code_param()进行参数的设置
set_bar_code_param():设置(更改)模型参数
BarCodeHandle:模型句柄
GenParamName:设置一些寻找一维码的参数字段
GenParamValue:设置一些寻找一维码的参数的值(对应GenParamName)
这里的参数字段比较多,就不一一列出了,一般常用的有
timeout:超时时间,以毫秒为单位,超过设定的时间就算超时
element_size_min:条码元素最小size,(元素:一维码里单独的条码)范围是1-64,默认是2,如果一维码的元素实在太小了,可以适当调小点
stop_after_result_num:成功解码后码的数量如果达到这个设定的值,就停止解码,值的范围是0-n,如果码太多了,你不需要解那么多,可以设定一个合适的值,减少运行时间
check_char:这个参数是用于校验一维码的正确性,他有三个值[‘absent’, ‘present’, ‘preserved’],默认是第一个,一般是会将这个参数设置为present。
find_bar_code():查找给定图像的一维码,并返回数据
Image:输入图像,指定在此图像里查找一维码
SymbolRegions:返回一维码的区域,没有找到为空
BarCodeHandle:一维码模型句柄
CodeType:查找指定的一维码类型
DecodedDataStrings:所有成功解码的数据串
将CodeType设置为’auto’,自动检测所有类型的码,如果你知道码的类型,将其设置为指定的类型,运行速度会比’auto’快。
代码:
list_files ('C:/Users/10644/Desktop/一维码', ['files','follow_links','recursive'], 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
*循环读图 不是灰度图,要将其转为灰度图(rgb1_to_gray)
read_image (Image, ImageFiles[Index])
*图像锐化
emphasize (Image, ImageEmphasize, 10, 10, 1)
*图像放大1.5倍
zoom_image_factor (ImageEmphasize, ImageZoomed, 1.5, 1.5, 'constant')
*创建一维码模型
create_bar_code_model ([], [], BarCodeHandle)
*设置超时500ms
set_bar_code_param (BarCodeHandle, 'timeout', 500)
*设置校验模式
set_bar_code_param (BarCodeHandle, 'check_char', 'present')
*自动检测任何类型的一维码
find_bar_code (ImageZoomed, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
*拿到检测到的一维码的类型
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
*将解码的数据串显示在窗体上
disp_message (200000, BarCodeResults + '\t' + DecodedDataStrings, 'image', 12, 12, 'black', 'green')
*获取码在图上的坐标及面积
area_center_gray (SymbolRegions, ImageZoomed, Area, Row, Column)
*在窗体上显示坐标及面积
disp_message (200000, 'Area:' + Area + '\tRow:' + Row + '\tColumn:' + Column,'iamge',12,500,'black','green')
endfor
效果图:
萌新学习中,有什么不对的地方请多多指点。