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;最大索引是元素个数减一。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

扑腾的菜鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值