使用条形码参数'contrast_min'的示例程序;
在图像中存在低对比度条形结构的情况下,该参数可用于减少find_bar_code的运行时间;
此外,如果预期的条形码具有高对比度,contrast_min'也可用于减少误报的数量。


总代码:

*创建一个条形码阅读器的模型。
create_bar_code_model ([], [], BarCodeHandle)
*'element_size_min'条码最小尺寸(宽度和间距)指 黑条或者白条的最小尺寸像素是1.5像素
set_bar_code_param (BarCodeHandle, 'element_size_min', 1.5)
*
* Initialization
dev_update_off ()
dev_close_window ()
*
* Read and display example images without any visible bar codes
read_image (Image, 'barcode/25interleaved/25interleaved_zeiss1')
*
* Set display defaults
dev_open_window_fit_image (Image, 0, 0, 600, 500, WindowHandle)
dev_display (Image)
dev_set_draw ('margin')
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
*得到窗口的行列坐标以及宽和高
get_window_extents (WindowHandle, Row, Column, Width, Height)
dev_open_window (0, Width + 5, 400, 300, 'white', WindowHandleText)
set_display_font (WindowHandleText, 14, 'mono', 'true', 'false')
*
* Display information about the example
*显示提示信息
Message[0] := 'This example demonstrates the use of the bar code parameter \'contrast_min\'.'
Message[1] := ' '
Message[2] := 'The parameter \'contrast_min\' can be used to reduce the runtime of find_bar_code in the presence of low contrast bar-like structures in an image. Moreover \'contrast_min\' can also be used to reduce the number of false positives in applications where the expected barcodes have a high contrast.'
MessageWrapped := regexp_replace(Message + ' ',['(.{0,35})\\s','replace_all'],'$1\n')
*在另外一个窗口显示信息
disp_message (WindowHandleText, MessageWrapped, 'window', 12, 12, 'black', 'false')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*设置活动窗口----让窗口处于活动状态
dev_set_window (WindowHandle)
dev_clear_window ()
dev_display (Image)
*
* Number of repetitions for runtime measurements
*运行时测量的重复次数
NumRepeat := 100
*
* First, set the minimum contrast of the bar code candidate regions
* to 0 (default)
*首先,将条形码候选区域的最小对比度设置为0(默认值)ContrastMinValue := 0
set_bar_code_param (BarCodeHandle, 'contrast_min', ContrastMinValue)
*
* The bar code reader finds many bar code candidate regions that have
* a low absolute contrast
Times := []
for I := 0 to NumRepeat by 1count_seconds (Start)find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)count_seconds (End)Time := End - StartTimes := [Times,Time]
endfor
RunTimeContrastMinLow := 1000 * median(Times)
* Get candidate regions and display results
*获取候选区域并显示结果get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'candidate_regions')
count_obj (BarCodeObjects, Number)
dev_set_color ('red')
dev_set_line_width (5)
dev_display (BarCodeObjects)*设置活动窗口为另外一个窗口
dev_set_window (WindowHandleText)
dev_clear_window ()
Message := ['\'contrast_min\' = ' + ContrastMinValue + ':','   Found ' + Number + ' candidate(s) in ' + (RunTimeContrastMinLow$'.4') + ' ms']
disp_message (WindowHandleText, Message, 'window', 12, 12, '', 'false')
*
* Now, set the bar code reader parameter 'contrast_min' to a value
* greater than 0.0 to consider only candidates having an absolute
* contrast of at least that value.*对比度增加 能把一些干扰项去除,能够最快最准的找到一些条码
ContrastMinValue := 120
set_bar_code_param (BarCodeHandle, 'contrast_min', ContrastMinValue)
*
* Search again for bar codes. Now, a significantly smaller number of
* candidates should be found, and the overall runtime should be reduced.
Times := []
for I := 0 to NumRepeat by 1count_seconds (Start)find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)count_seconds (End)Time := End - StartTimes := [Times,Time]
endfor
RunTimeContrastMinHigh := 1000 * median(Times)
* Get candidate regions and display results
dev_set_window (WindowHandle)
get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'candidate_regions')
count_obj (BarCodeObjects, Number)
dev_set_color ('forest green')
dev_set_line_width (3)
dev_display (BarCodeObjects)
smallest_rectangle1 (SymbolRegions, Row1, Column1, Row2, Column2)
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', DecodedTypes)
disp_message (WindowHandle, DecodedTypes + '\n' + DecodedDataStrings, 'image', Row1, Column2 + 20, 'black', 'true')
dev_set_window (WindowHandleText)
Message := ['\'contrast_min\' = ' + ContrastMinValue + ':','   Found ' + Number + ' candidate(s) in ' + (RunTimeContrastMinHigh$'.4') + ' ms']
disp_message (WindowHandleText, Message, 'window', 62, 12, 'forest green', 'false')
Message := 'Setting \'contrast_min\' to a higher value typically results in a faster execution and in fewer false positives.'
MessageWrapped := regexp_replace(Message + ' ',['(.{0,35})\\s','replace_all'],'$1\n')
disp_message (WindowHandleText, MessageWrapped, 'window', 122, 12, 'black', 'false')
*
* Close the bar code reader
clear_bar_code_model (BarCodeHandle)

逐段分析:

1、当对比度为0的时候

*创建一个条形码阅读器的模型。
create_bar_code_model ([], [], BarCodeHandle)*'element_size_min'条码最小尺寸(宽度和间距)指 黑条或者白条的最小尺寸像素是1.5像素
set_bar_code_param (BarCodeHandle, 'element_size_min', 1.5)dev_update_off ()
dev_close_window ()*读取图片
read_image (Image, 'barcode/25interleaved/25interleaved_zeiss1')*设置一些参数
dev_open_window_fit_image (Image, 0, 0, 600, 500, WindowHandle)
dev_display (Image)
dev_set_draw ('margin')
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')*得到窗口的行列坐标以及宽和高
get_window_extents (WindowHandle, Row, Column, Width, Height)

*打开另外一个窗口
dev_open_window (0, Width + 5, 400, 300, 'white', WindowHandleText)
set_display_font (WindowHandleText, 14, 'mono', 'true', 'false')*显示提示信息
Message[0] := 'This example demonstrates the use of the bar code parameter \'contrast_min\'.'
Message[1] := ' '
Message[2] := 'The parameter \'contrast_min\' can be used to reduce the runtime of
find_bar_code in the presence of low contrast bar-like structures in an image. Moreover \'contrast_min\' can also be used to reduce the number of false positives in applications where the expected barcodes have a high contrast.'
MessageWrapped := regexp_replace(Message + ' ',['(.{0,35})\\s','replace_all'],'$1\n')*在另外一个窗口显示信息
disp_message (WindowHandleText, MessageWrapped, 'window', 12, 12, 'black', 'false')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()

*设置活动窗口----让窗口处于活动状态
dev_set_window (WindowHandle)
dev_clear_window ()
dev_display (Image)*运行时测量的重复次数
NumRepeat := 100*首先,将条形码候选区域的最小对比度设置为0(默认值)
ContrastMinValue := 0*设置条形码模型的选定参数
set_bar_code_param (BarCodeHandle, 'contrast_min', ContrastMinValue)*条形码阅读器会找到许多绝对对比度较低的条形码候选区域
Times := []
for I := 0 to NumRepeat by 1count_seconds (Start)find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)count_seconds (End)Time := End - StartTimes := [Times,Time]
endfor
*定义中间值
RunTimeContrastMinLow := 1000 * median(Times)*获取候选区域并显示结果
get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'candidate_regions')*计算候选区域的个数
count_obj (BarCodeObjects, Number)
dev_set_color ('red')
dev_set_line_width (5)
dev_display (BarCodeObjects)

*设置活动窗口为另外一个窗口
dev_set_window (WindowHandleText)*清除窗口
dev_clear_window ()
Message := ['\'contrast_min\' = ' + ContrastMinValue + ':','   Found ' + Number + ' candidate(s) in ' + (RunTimeContrastMinLow$'.4') + ' ms']*显示结果
disp_message (WindowHandleText, Message, 'window', 12, 12, '', 'false')


2、当对比度为120的时候

*对比度增加 能把一些干扰项去除,能够最快最准的找到一些条码
ContrastMinValue := 120*设置条形码模型的选定参数
set_bar_code_param (BarCodeHandle, 'contrast_min', ContrastMinValue)*再次搜索条形码。现在,数量要少得多的应该找到候选者,并减少总体运行时间。
Times := []
for I := 0 to NumRepeat by 1count_seconds (Start)*检测并读取图像中的条形码符号find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)count_seconds (End)Time := End - StartTimes := [Times,Time]
endfor
*定义中间时间
RunTimeContrastMinHigh := 1000 * median(Times)*设置活动窗口
dev_set_window (WindowHandle)*获取候选区域并显示结果
get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'candidate_regions')*计算候选区域的个数
count_obj (BarCodeObjects, Number)
dev_set_color ('forest green')
dev_set_line_width (3)
dev_display (BarCodeObjects)

*定一个矩形、获得候选区域的行列坐标
smallest_rectangle1 (SymbolRegions, Row1, Column1, Row2, Column2)*得到条形码的结果
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', DecodedTypes)*显示信息
disp_message (WindowHandle, DecodedTypes + '\n' + DecodedDataStrings, 'image', Row1, Column2 + 20, 'black', 'true')

*设置活动窗口
dev_set_window (WindowHandleText)
Message := ['\'contrast_min\' = ' + ContrastMinValue + ':','   Found ' + Number + ' candidate(s) in ' + (RunTimeContrastMinHigh$'.4') + ' ms']*显示信息
disp_message (WindowHandleText, Message, 'window', 62, 12, 'forest green', 'false')Message := 'Setting \'contrast_min\' to a higher value typically results in a faster execution and in fewer false positives.'
MessageWrapped := regexp_replace(Message + ' ',['(.{0,35})\\s','replace_all'],'$1\n')
disp_message (WindowHandleText, MessageWrapped, 'window', 122, 12, 'black', 'false')*清除模型句柄
clear_bar_code_model (BarCodeHandle)


 'contrast_min':

条形码元素的前景和背景之间的最小对比度。将此参数设置为大于5的值将有助于操作员查找条形码,以优化候选区域搜索。find_bar_code将拒绝对比度值低于“contrast_min”的所有候选区域。因此,设置较高的“对比度最小”值将提高find_bar_代码的运行时性能。但是,请注意,所有对比度值低于“对比度_min”的条形码都不会被读取。计算出的对比度值是一个近似值,以加快执行时间。尝试为“对比度最小值”设置一个较低的阈值,以查找可能被拒绝且对比度值接近指定“对比度最小值”的条形码。

典型值:[0,40,90,120,]

默认值:0

由此例程可以看出对比度增加 能把一些干扰项去除,能够最快最准的找到一些条形码

基于Halcon学习的一维码识别【四】barcode.param_contrast.hdev相关推荐

  1. 基于Halcon学习的一维码识别【六】barcode.param_majority_voting.hdev

    该示例程序显示了条形码参数'majority_voting'的效果.条形码阅读器分析多条扫描线,并尝试对其进行解码.默认情况下,一旦一条扫描线被成功解码,该过程就会终止.在某些情况下,由于本地打印错误 ...

  2. 基于Halcon学习的一维码识别【十四】ean13addon.hdev

    读取EAN-13 Add-On 5型条形码 总代码: *读取EAN-13 Add-On 5型条形码 create_bar_code_model ([], [], BarCodeHandle) dev_ ...

  3. 基于Halcon学习的一维码识别【八】barcode.param_meas_thresh_abs.hdev

    使用条形码参数'meas_thresh_abs'的示例程序:该参数可用于在查找我们希望具有高对比度的条形码符号区域时减少误报的数量.为了人工证明这一点,我们试图找到条形码类型的药典,它没有检查字符,因 ...

  4. 基于Halcon学习的一维码识别【十三】ean13.hdev

    读取EAN-13型条形码 总代码: *创建模板 create_bar_code_model ([], [], BarCodeHandle) CodeType := 'EAN-13' * dev_clo ...

  5. 基于Halcon学习的缺陷检测【四】光伏电池片的指纹以及划痕检测【第一种方法】

    此例子主要是为了把光伏电池片的指纹以及划痕标注出来.  总代码: *读取图片 read_image (Image, 'E:/研究生学习/电池片练习/手指印/截图.png') *清除窗口 dev_cle ...

  6. halcon学习-二维码识别过程中对参数的选择以及对畸变的处理学习日志及遇到的问题

    写在前面: 本日志内容参考资料如下: 1.set_data_code_2d_param参数的选择 https://blog.csdn.net/cherish_now_forever/article/d ...

  7. 基于Halcon学习的缺陷检测【一】detect_mura_blur.hdev

    这个例子展示了如何在模糊图像中检测mura缺陷 总代码: *频域+差分+空间域 dev_close_window () dev_update_off () Path := 'lcd/mura_defe ...

  8. 基于Halcon学习的缺陷检测【五】光伏电池片的指纹以及划痕检测【第二种方法】

     此例子主要是为了把光伏电池片的指纹以及划痕标注出来. 总代码:  *读取图片 read_image (Image, 'E:/研究生学习/电池片练习/手指印/截图.png')*清除窗口 dev_cle ...

  9. halcon一维码识别

    halcon一维码识别 1.创建模板 create_bar_code_model (GenParamName, GenParamValue, BarCodeHandle) GenParamName 可 ...

最新文章

  1. 19.Remove Nth Node From End of List
  2. C# - 委托中的逆变
  3. 使用JDBC操作基于Oracle的CLOB,BLOB字段类型
  4. PsTools在***中的一点小应用
  5. 编程开发使用的软件大全
  6. win7分区软件_神奇的工作室win7旗舰版重装系统连不上网怎么解决
  7. python ssh实现_SSH协议的Python实现paramiko
  8. java数据结构之快速排序
  9. vue过滤器的那点事
  10. AWT_事件监听2(Java)
  11. 前端常见的几种布局方式
  12. 计算机论文注释范例,论文注释的标准格式范例(范例详解论文正确书写规范)...
  13. JavaScript基础教程之flag的用法
  14. 基于fabricjs实现钢笔工具
  15. 6-1 定义一个矩形类(C++构造函数) (10 分)
  16. 和平精英服务器维护多少钱,和平精英因充钱太多服务器崩溃?王小歪充52W,只用一小时...
  17. 全球与中国汽车内饰牛皮革市场发展调研及未来前景预测报告2022-2028年
  18. 还只会用小黄鸭解压?看来你不是一个时髦的程序员!
  19. vim高亮多处,搜索多个关键词
  20. 第四章 玩转捕获数据包

热门文章

  1. python热力图颜色_Python如何实现热力图?可视化入库图实战演示
  2. Halcon直线检测
  3. 按使用范围来说计算机可分为,《计算机应用基础》试题精选
  4. python list转string_【幼儿园级】0基础学python一本通(上)——AI未来系列1
  5. SpringBoot用实体接收Get请求参数
  6. 泛函分析 03.05 内积空间与Hilbert空间 - 可分的Hilbert空间
  7. Android中自定义Textview解决文字和数字换行不整齐
  8. 如何随意修改网页内容
  9. 通过安卓API的Tabs3实现仿优酷tabhost效果
  10. A. Circle Metro