HALCON学习之旅(六)

HALCON学习之旅(六)

1、Halcon代码如何导出高级编程语言代码 + 配置Halcon/C++编程环境

    流程如下:
        ①打开一个之前写好的程序:

在这里插入图片描述
        ②打开导出菜单:

在这里插入图片描述
        ③选择导出文件格式(在此举例导出C++格式文件):

在这里插入图片描述
        ④选择导出的其他文件属性:

在这里插入图片描述
        ④点击导出,生成cpp文件

在这里插入图片描述
        ⑤打开vs2017,将该文件内容替换到新建工程下的.cpp文件中

在这里插入图片描述
        ⑥配置Halcon环境:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        ⑥运行:

在这里插入图片描述
在这里插入图片描述

2、Halcon连续采集相机图像

    工业相机的打开方式有两种:
        ①、用工业相机自带的相机管家打开
在这里插入图片描述
        ②、用Halcon自带的图像采集助手打开(前提:必须是Halcon所支持的相机)

在这里插入图片描述
    Halcon图像采集助手功能介绍:
        ①、资源

在这里插入图片描述
        ②、连接(以电脑自带的摄像头做实例)

在这里插入图片描述

        ③、参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        ④、检测

在这里插入图片描述
        ⑤、代码生成

在这里插入图片描述
    代码演示:

* Image Acquisition 01: Code generated by Image Acquisition 01
* Image Acquisition 01: Attention: The initialization may fail in case parameters need to
* Image Acquisition 01: be set in a specific order (e.g., image resolution vs. offset).

*打开并配置图像采集设备
*参数1 图像采集接口名称 即对应的DLL(Windows)或共享库(Linux/macOS)的名称
*参数2 图像采集界面所需的水平分辨率(绝对值或 1 表示全分辨率,2 表示半分辨率,或 4 表示四分之一分辨率)
*参数3 图像采集接口所需的垂直分辨率(绝对值或 1 表示全分辨率,2 表示半分辨率,或 4 表示四分之一分辨率)
*参数4 所需图像部分的宽度(绝对值或0水平分辨率- 2*开始列)
*参数5 所需图像部分的高度(绝对值或0垂直分辨率- 2*开始行)
*参数6 所需图像部分左上角的行号(开始行)
*参数7 所需图像部分左上角的列号(开始列)
*参数8 所需半图或全图
*参数9 每像素和图像通道传输的位数
*参数10 抓取图像的输出颜色格式,对于单通道通常为“灰色”或“原始”,对于三通道图像通常为“rgb”或“yuv”
*参数11 具有设备特定含义的通用参数
*参数12 外部触发
*参数13 使用的相机类型
*参数14 图像采集设备连接到的端口
*参数15 多路复用器的相机输入线
*参数16 打开的图像采集设备句柄
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] Integrated Webcam', 0, -1, AcqHandle)

*设置图像采集设备的具体参数。
*参数1 要使用的采集设备的句柄
*参数2 要更改的参数类型
*参数3 设置更改内容
set_framegrabber_param (AcqHandle, 'grab_timeout', 5000)
set_framegrabber_param (AcqHandle, 'brightness', -3)
set_framegrabber_param (AcqHandle, 'contrast', 0)
set_framegrabber_param (AcqHandle, 'hue', -1232)
set_framegrabber_param (AcqHandle, 'saturation', 67)
set_framegrabber_param (AcqHandle, 'sharpness', 5)
set_framegrabber_param (AcqHandle, 'gamma', 100)
set_framegrabber_param (AcqHandle, 'white_balance', 4930)
set_framegrabber_param (AcqHandle, 'backlight_compensation', 'on')
set_framegrabber_param (AcqHandle, 'exposure', -6)

*从指定的图像采集设备开始异步抓取
*参数1 要使用的采集设备的句柄
*参数2 此参数已过时且无效
grab_image_start (AcqHandle, -1)

while (true)
    *从指定的图像采集设备异步抓取图像
    *参数1 抓取的图像
    *参数2 要使用的采集设备的句柄
    *参数3 异步抓取开始和图像交付之间的最大容许延迟 [ms]
    grab_image_async (Image, AcqHandle, -1)
    * Image Acquisition 01: Do something
endwhile

*关闭指定的图像采集设备
*参数1 要关闭的图像采集设备的句柄。
close_framegrabber (AcqHandle)

    效果展示:

在这里插入图片描述

3、Halcon批量加载图像

    方法一:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
    方法二:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
    出现了一个新认识的算子接口tuple_regexp_select,以下是该算子的详细参数详解。

* Image Acquisition 01: Code generated by Image Acquisition 01
*列出目录里的所有文件
list_files ('F:/halcon_Learning/image', ['files','follow_links'], ImageFiles)

*选择与正则表达式匹配的元素
*参数1 要匹配的输入字符串
*参数2 正则表达式
*      ^                                       匹配字符串的开头
*      $                                       匹配字符串的结尾(允许末尾换行)
*      .                                       匹配除换行符外的任何字符
*      [...]                                   匹配括号中列出的任何字符字面量。如果第一个字符是'^',则匹配除列表中的字符外的任何字符。
*                                              您可以使用'-'字符,如'[A-Z0-9]'来选择字符范围。除了'\'外,其他字符在括号中失去了它们的特殊含义。
*                                              在这些方括号中,可以使用以下POSIX字符类(注意需要额外的方括号)
*                                              [:alnum:]             字母和数字字符 
*                                              [:alpha:]              字母字符
*                                              [:blank:]              空格和tab
*                                              [:cntrl:]              控制字符
*                                              [:digit:]              数字
*                                              [:graph:]              非空白(如空格或控制字符)
*                                              [:lower:]              小写字母
*                                              [:print:]              类似[:graph:],但包含空格
*                                              [:punct:]              标点字符
*                                              [:space:]              所有空格字符([:blank:],换行符,…)
*                                              [:upper:]              大写字母
*                                              [:xdigit:]             允许的十六进制数字(0-9a-fA-F)

*      *                                       允许前面的文字或组重复0次或更多次
*      +                                       允许1次或更多的重复
*      ?                                      允许01次重复
*      {n,m}                                   允许n到m个重复
*      {n}                                     允许n次重复
*                                              上面的重复量词默认是贪婪的,也就是说,它们尽量延长比赛时间。附加,尝试查找最小匹配,例如+?

*      |                                       分离备选匹配表达式
*      ()                                      分组子模式并创建捕获组
*                                              该组捕获的子字符串将单独存储
*                                              (:)                  分组子模式而不创建捕获组
*                                              (=)                  正向预测(要求的条件右侧的比赛)
*                                              (? !)                  负向预测(禁赛的条件右侧的比赛)
*                                              (<=)                 正向后预测(要求的条件左侧的比赛)
*                                              (? < !)                负向后预测(禁赛的条件左侧的比赛)

*      \                                       转义任何特殊符号以将其视为文字。请注意,一些宿主语言,如HDevelop和C/ c++已经使用了反斜杠
*                                              作为通用转义字符。在这种情况下,'\\.”匹配一个文字点,而'\\\\'匹配文字反斜杠。
*                                              此外,还有一些特殊的代码(大写的每个表示否定的版本): 
*                                              \d,\D                 匹配一个数字
*                                              \w, \W                 匹配一个字母、数字或下划线
*                                              \s,\S                 匹配空白字符
*                                              \b,\B                 匹配单词边界

*此外,可以通过传递字符串元组来设置一些选项
*'ignore_case'                                      不区分大小写
*'multiline'                                        '^''$'匹配每行的开始和结束
*'dot_matches_all'                                  允许'.'字符也匹配换行符
*newline_lf' , 'newline_crlf' , 'newline_cr'        指定输入数据中换行符的编码所有系统上的默认值都是 LF(尽管在 Windows 文件中通常 CRLF 用作换行符,但当将文件读入内存时,读取操作符为每个换行符返回 '\n',这与 LF 相同)
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
endfor

4、Halcon设置自动保存程序

    流程如下:
        ①、点击编辑->参数选择

在这里插入图片描述
        ②、点击一般属性->一般选项

在这里插入图片描述
        ③、Halcon崩溃/异常后文件临时存储路径 C:Users/ADMINI ~1/AppData/Local/Temp/hdevelop/程序名称.hdev,其中"ADMINI ~1" 是用户文件名。比如我是 “Administrator” ,路径如下:
在这里插入图片描述

5、Halcon数据结构讲解

        Halcon有两类基本参数:图像参数Iconic (image, region, XLD)与控制参数Control (string, integer, real, handle)。在Halcon算子的参数中,它们依次被分为:输入图像参数、输出图像参数、输入控制参数、输出控制参数;并且其输入参数不会被算子改变。

在这里插入图片描述
    图像参数:
        ①、Image
        在Halcon中,Image是由通道和域构成。其中,通道可以看做为像素矩阵,同时通道包含单通道和多通道,一张图像可以由一个通道或者多个通道组成且通道大小相同。域可以看做Halcon中的region of interest(感兴趣区域)即regions,所有通道共享这个域。
        像素类型:

类型位数有无符号用途
Byte8位无符号标准的灰度图像
Uint216位无符号标准的灰度图像
Int18位有符号两帧图像差异
Int216位有符号两帧图像差异
Int432位有符号两幅图像的灰度频谱
Direction8位无符号(值为:0 - 179)边缘梯度
Real32位有符号边缘提取
Complex两个 Real 值有符号用频率表示图像
Cyclic8位无符号给每个颜色分配灰度值
Vector_field两帧 Real 类型图像有符号描述X或者Y方向的运动

        ②、regions
        将区域表示为以行列坐标为内容的游程编码的形式,使之成为一种压缩方式,存储更加高效。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        ③、XLD(Extended Line Description)
        XLD对象提供了提供了亚像素精度。有两种基本结构:轮廓和多边形XLD。(和regions的区别亚像素)。

    控制参数:

控制数据类型
string字符串
integer整型
real实型
tuple数组(可为整型,实型或是字符串)
handle句柄

    注意要点:
        ①、Iconic tuple(图像数组) 最小索引是:1;最大索引是元素个数。
        ②、Control tuple(控制数组) 最小索引是:0;最大索引是元素个数减一。


  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Halcon是一种高级计算机视觉开发工具,通过其强大的图像处理能力可以实现各种视觉应用。学习Halcon需要掌握其基础知识和应用技巧。其中最有效的学习资料之一就是官方文档提供的CHM文件。 Halcon的CHM文件包含了完整的文档和API参考,可以帮助开发人员快速理解和掌握Halcon的各项功能和应用。该文件适用于初学者或者进阶者。对于初学者来说,可以通过详细的介绍了解Halcon的组成,语言特点、数据类型、类型转换、变量等基础知识。对于进阶者,可以通过文档中的实例代码、算法描述、函数用法和参数解释等详细内容,不断提升自己的开发技能。 Halcon的CHM文件非常实用,因为它可以离线使用。无需访问互联网,只要下载到本地即可随时随地使用,特别适合在没有互联网的环境下使用,如机器人、相机或计算机视觉系统。 总之,Halcon的CHM学习资料是Halcon开发者必不可少的资料之一,对于初学者或者进阶者都可以快速提高技术水平,提高开发效率,达到预期的结果。 ### 回答2: Halcon 学习资料chm 是一个包含了Halcon学习资料的CHM文件。Halcon是一款计算机视觉软件,用于图像处理及分析。对于Halcon使用者来说,学习资料是十分重要的,可以帮助他们更快地掌握软件的技能和知识,从而更好地使用Halcon进行图像处理。 Halcon 学习资料CHM文件中包含了Halcon的软件安装和使用手册、编程手册、算法手册等相关的文档。这些文档详细地介绍了Halcon的各个方面,包括各种图像处理技术和算法的应用,编程方法和规范等等。 通过阅读Halcon 学习资料CHM文件,用户可以更好地理解Halcon软件的工作原理和使用方法,并能够掌握一些实用的技巧和知识,提高图像处理的效率和质量。此外,Halcon学习资料CHM文件还提供了一些实例程序和工程,可以让用户在实际应用中更好地理解和掌握Halcon的各项功能和特性。 总之,Halcon 学习资料CHM文件对于Halcon使用者来说是非常重要的,它为用户提供了一系列丰富的知识和技能,帮助用户更好地应用Halcon进行图像处理和分析。 ### 回答3: halcon 学习资料 chm 是一个针对 halcon 软件学习的 chm 文档。Halcon 是由德国 MVTec 公司开发的一款用于图像处理和机器视觉应用的软件,在工业自动化、医疗影像、安防等领域都有广泛的应用。 学习使用 halcon 软件需要掌握其相关的知识体系和技术原理,而 halcon 学习资料 chm 正是为此而设计的。该文档内部包含了丰富的学习资料,包括 halcon 软件的基本介绍、图像处理原理、机器视觉算法以及实例演示等内容,涵盖了 halcon 学习的方方面面,适合初学者和有一定基础的人员使用。 使用 halcon 学习资料 chm 学习,可以帮助初学者迅速掌握 halcon 的基本知识和技术原理,同时也可以帮助有一定基础的人员深入理解 halcon 的高级特性和应用技巧。该文档具有系统性、实用性和可靠性等特点,可以为学习者提供全面的学习资源和指导,助力于其提高专业技能和应用能力。 总之,halcon 学习资料 chm 对于学习者来说是一份宝贵的资料,有助于加快学习进度、巩固知识体系、提高应用水平,值得每位 halcon 学习者使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扑腾的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值