HALCON学习之旅(六)
HALCON学习之旅(六)
文章目录
- HALCON学习之旅(六)
- 1、Halcon代码如何导出高级编程语言代码 + 配置Halcon/C++编程环境
- 2、Halcon连续采集相机图像
- 3、Halcon批量加载图像
- 4、Halcon设置自动保存程序
- 5、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次或更多的重复
* ? 允许0或1次重复
* {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,所有通道共享这个域。
像素类型:
类型 | 位数 | 有无符号 | 用途 |
---|---|---|---|
Byte | 8位 | 无符号 | 标准的灰度图像 |
Uint2 | 16位 | 无符号 | 标准的灰度图像 |
Int1 | 8位 | 有符号 | 两帧图像差异 |
Int2 | 16位 | 有符号 | 两帧图像差异 |
Int4 | 32位 | 有符号 | 两幅图像的灰度频谱 |
Direction | 8位 | 无符号(值为:0 - 179) | 边缘梯度 |
Real | 32位 | 有符号 | 边缘提取 |
Complex | 两个 Real 值 | 有符号 | 用频率表示图像 |
Cyclic | 8位 | 无符号 | 给每个颜色分配灰度值 |
Vector_field | 两帧 Real 类型图像 | 有符号 | 描述X或者Y方向的运动 |
②、regions
将区域表示为以行列坐标为内容的游程编码的形式,使之成为一种压缩方式,存储更加高效。
③、XLD(Extended Line Description)
XLD对象提供了提供了亚像素精度。有两种基本结构:轮廓和多边形XLD。(和regions的区别亚像素)。
控制参数:
控制数据 | 类型 |
---|---|
string | 字符串 |
integer | 整型 |
real | 实型 |
tuple | 数组(可为整型,实型或是字符串) |
handle | 句柄 |
注意要点:
①、Iconic tuple(图像数组) 最小索引是:1;最大索引是元素个数。
②、Control tuple(控制数组) 最小索引是:0;最大索引是元素个数减一。
以上就是本章的所有内容了,有误的请指出,感谢
HALCON学习之旅(六)相关推荐
- HALCON学习之旅(七)
HALCON学习之旅(七) 文章目录 HALCON学习之旅(七) 1.MFC与Halcon混合编程 2.C#与Halcon混合编程 3.Halcon测量助手使用 4.Halcon实例进阶一(拟合区域椭 ...
- HALCON学习之旅(五)
HALCON学习之旅(五) 文章目录 HALCON学习之旅(五) 1.如何获取程序运行时间 2.如何将Bayer图像转换为彩色图像 3.如何将图像转化为矩阵形式 4.如何让图像自适应窗口(补充) 5. ...
- HALCON学习之旅(四)
HALCON学习之旅(四) 文章目录 HALCON学习之旅(四) 1.如何对区域进行反选,补集,交集,合并操作 2.如何对区域进行填充操作 3.如何根据区域特征过滤区域 4.如何画各种交互ROI图形 ...
- HALCON学习之旅(三)
HALCON学习之旅(三) 文章目录 HALCON学习之旅(三) 1.创建自适应图形窗口 2.霍夫变换寻找图像直线 1.创建自适应图形窗口 原因:默认的图形窗口尺寸为512*512.当图像变量尺寸与图 ...
- HALCON学习之旅(二)
HALCON学习之旅(二) 文章目录 HALCON学习之旅(二) 1.HALCON用户界面操作符 2.HACLON基础语法 ①.运算符 ②.Tuple数组 ③.字符数字格式化 1.HALCON用户界面 ...
- HALCON学习之旅(一)
HALCON学习之旅(一) 文章目录 HALCON学习之旅(一) 1.HALCON介绍 2.HALCON安装包下载 + 配置license许可证文件 3.HALCON初识 1.HALCON介绍 HAL ...
- 我的Go语言学习之旅六:做一个WIN的简单弹窗
做为一个WIN的爱好者,不得不说,通常情况下在学习一门新语言之后我会很急于制作一个弹窗来测试一下这个语言在WIN的窗体效果,这里不多说,先上代码. package mainimport ( " ...
- SpringBoot学习之旅(七)---JPA进阶篇之自定义查询、修改、分页
文章目录 前言 源码下载 其他文章 查询关键字 自定义Select和Update 分页及自定义分页 自定义分页 分页查询的业务代码 前言 前一节SpringBoot学习之旅(六)-JPA操作MySql ...
- 无星的RN学习之旅(六)-第三方App跳转,苹果商店跳转,loading框
1.第三方App跳转 这是很常见的问题,第三方app跳转到本app去做一些业务操作. 但是这时候会发现,你跳进来,是黑色的,没有界面,没想到吧23333 其实这在前面说过,RN的想法很独特,是一个ct ...
最新文章
- 老视频修复爆火,却惹恼了历史学家:这并不是照片的本质
- 版本控制 Git RPM打包
- FAX modem和传真协议简介
- 区块链BaaS云服务(12)易居(中国) 房地产 EBaaS(Estate Blockchain as a Service)
- xib和storyboard小谈,
- 细水长flow之f-VAEs:Glow与VAEs的联姻
- hdu 5071 Chat(模拟|Splay)
- Twitch如何实现转码器比FFmepg性能提升65%?(上)
- 111. 二叉树的最小深度 golang
- QT Openssl no OPENSSL_Applink 解决
- 计算出你和另一个人的关系,准的邪门了!
- 【女生节】圆周率小数点后37373737位中,“37”出现的次数是?
- oracle大对象实例_oracle 数据迁移案例 从 8.1.7.4到9.2.0.8
- java反编译 编译_5个最佳Java反编译器
- pip下载 离线安装第三方包
- iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT ...
- MFC之菜单栏的相关使用14
- 线程同步作业(一):Lock,monitor
- (励志)(转载) 在华为的十年
- 本机电脑访问其他电脑的磁盘
热门文章
- python deepcopy_轻轻吐槽下python的deepcopy居然一点不deep
- div旋转45度_为什么不要买旋转式电动牙刷:欧乐B电动牙刷D12开箱与体验
- centos更改默认python_CentOS系统python默认版本由python2改为python3
- python系统提供构造函数传入参数_python类变量与构造函数的使用
- json转excel_如何快速把json数据转到excel表格,方便个人查看
- vue 后端返回文件流下载文件
- c语言将数据写入文件后乱码_html文件的下载,如何使用字节流,如何使用转换流...
- python房子代码_基于python的链家小区房价爬取——仅需60行代码!
- pythonself用法_全面理解python中self的用法
- linux ora-39002,impdp ORA-39002,ORA-39166,ORA-39164的问题及解决