Halcon自定义函数封装方法(全网最详细)

文章目录

    • 1、名词解释
    • 2、例子介绍
        • 1、处理原图与任务:
        • 2、代码与解析:
    • 3、Halcon函数封装方式
        • ①明确需求
        • ②选取函数部分进行函数创建,更改函数接口
        • ③运行验证与函数更改操作

有网友说不太清楚这个halcon函数的封装方法。今天写个教程帖子,大家一起进步分享。

1、名词解释

算子:
指Halcon中最基础、最底层的函数(即你看不到它的代码实现),一个算子只有一句话,例如threshold算子。

函数:
由多个算子组合成的函数。其特点是,可以通过鼠标右键单击“显示函数”打开。如下图:

在这里插入图片描述
在这里插入图片描述
通常,Halcon代码程序窗口中,算子和小函数的代码颜色是有差异的。如下图:
在这里插入图片描述

2、例子介绍

1、处理原图与任务:

要求求亮区外圆半径大小。
在这里插入图片描述

2、代码与解析:

* 读入图片
read_image (Image, 'C:/Users/Administrator/Desktop/1.jpg')
* 根据图片打开窗口
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
* 显示图片,用于预览
dev_display (Image)* 二值化
binary_threshold (Image, Region, 'max_separability', 'light', UsedThreshold)
* 分割连通域
connection (Region, ConnectedRegions)
* 使用特征筛选去掉小面积区域的干扰
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5000, 1000000000)
* 合并区域,为下一步求取最小外接矩形做准备
union1 (SelectedRegions, RegionUnion)
* 求取最小外接矩形
smallest_circle (RegionUnion, Row, Column, Radius)* 生成一个圆形,用于显示
gen_circle (Circle, Row, Column, Radius)*显示结果前的准备
dev_clear_window ()
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')* 显示相关结果
dev_display (Image)
dev_display (Circle)
disp_message (WindowHandle, '圆环半径: '+Radius, 'window', 50, 50, 'black', 'true')

3、Halcon函数封装方式

Halcon的函数创建分为以下几个步骤:
1、明确需求,要封装的函数要实现什么功能
2、选取函数部分进行函数创建,更改函数接口,即更改输入输出变量
3、运行验证与函数更改操作

①明确需求

我们拿上边的这个程序举例,我们这个程序完成的任务主要是:求取外接圆的半径并且显示

我们看代码一共分为三个部分:
1.准备阶段:读入图片、打开窗口、预览等工作。
2.处理阶段:进行图像处理,求取结果
3.显示阶段:对结果进行显示
如下图:
在这里插入图片描述
明确1:我们需要将第二部分“处理阶段的算子封装成一个函数”

此时我们再看处理阶段的代码,我们由分析可知:
1、此段代码需要一个图片,用于图像处理
2、需要得出圆环外接圆这个结果(外接圆的位置与半径)
由此确定:
传入一个图像变量,传出外接圆的坐标(X,Y)与外接圆的半径
到此需求已经明确。

②选取函数部分进行函数创建,更改函数接口

选中处理阶段函数,右键,点击“创建新函数”。如下图所示:
在这里插入图片描述
之后显示页面如下:
在这里插入图片描述
首先点击一般设置栏,编辑函数名称(你想把这个函数名叫什么就命什么名),再点击“参数”。
之后显示页面如下:
在这里插入图片描述
图标参数含义:即图片、区域、Xld轮廓等图形变量。
变量参数含义:指我们在程序中用得到的整形、浮点型、字符串、数组等变量

我们可以点击添加变量按钮进行输入输出变量的添加操作
如果我们要进行删除变量操作,操作方式如下图:
首先选中变量,点击移除
在这里插入图片描述
点击移除后:
在这里插入图片描述
也可以通过选中函数后点击“上移”、“下移”更改变量顺序。

我们由需求分析步骤可知,我们需要:
传入一个图像变量,传出外接圆的坐标(X,Y)与外接圆的半径
修改参数页面变量如下,并点击一般文档切换栏目:
在这里插入图片描述
一般文档栏目:(可以对函数进行说明性文档的编写)包括了函数的描述、实例程序、参数说明、高级注意事项4个部分。我们一般不进行填写。
在这里插入图片描述
点击上图中的参数文档:
参数文档包含了这个函数的详细的参数意义说明:如下图:
在这里插入图片描述
我们如果将一般文档和参数文档都填完整那么会出现什么情况呢?
你的函数有了一份像halcon算子一样的说明文档:
即选中一个算子,点击F1出现的算子帮助文档!
在这里插入图片描述
在这里插入图片描述
完成上述所有步骤点击确定按钮即可生成函数
在这里插入图片描述
在这里插入图片描述

③运行验证与函数更改操作

点击F5运行程序或者点击F6单步运行程序验证程序的准确性。
当F6单步调试到函数时可以点击F7运行到函数内部执行。点击F8跳出函数执行

如果想查看函数代码,选中函数,点击鼠标右键,选择显示函数即可查看代码:
在这里插入图片描述
可以点击红色方框内的后退按钮退出当前函数显示
如下图:
点击蓝色方框内的 按钮,打开函数编辑窗口(即上边我们进行函数名修改、接口参数变化的窗口)
在这里插入图片描述

  • 博主简介:
  • 工业自动化上位机软件工程师、机器视觉算法工程师、运动控制算法工程师。目前从业于智能制造自动化行业。 博主邮箱:2296776525@qq.com
  • 帮忙点个赞吧。哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg库音频解码示例

#include <stdio.h> #include <stdlib.h> extern "C"{// #include "avcodec.h" #include "avformat.h" } int main(char arg,char *argv[]) { char *filename "02.swf"; av_register_all();//注册所有可…

SQL Where in list 问题

不过,这种做法有两个缺陷1.Oracle In列表的数目有限制(1000)2.不能复用执行计划,每次几乎都是硬解析.3.In拼接可能存在SQL注入的风险

readn writen实现linux下socket缓冲区读写

socket上的read write 操作不同与一般的文件IO操作&#xff0c;socket上的用read write读写的字节数可能比要求的少,但这并不是错误&#xff0c;原因是socket的缓冲区可能已经达到了极限。此时所需要的就是再次调用read write 以写入或输出剩余的字符。这种情况在socket中很常见…

傅里叶变换进行缺陷检测detect_indent_fft.hdev(源代码与详细解析)

文章目录简介程序解析处理结果预览算法讲解简介 detect_indent_fft.hdev是halcon的示例程序&#xff0c;是傅里叶变换进行缺陷检测的一个例子&#xff0c;主要是傅里叶变换在复杂背景下的缺陷检测。 这个程序展示了如何利用快速傅里叶变换&#xff08;FFT&#xff09;对塑料制…

lua环境搭建

前言 Linux & Mac上安装 Lua 安装非常简单&#xff0c;只需要下载源码包并在终端解压编译即可&#xff0c;本文介绍Linux 系统上&#xff0c;lua5.3.0版本安装步骤&#xff1a; Linux 系统上安装 [rootgitlab ~]# mkdir /app/tools/lua -p [rootgitlab ~]# cd /app/tools/l…

八、job管理

查看用法&#xff1a; [rootsuper65 ~]# salt-run -d|grep jobsjobs.active:                      #查看当前执行的job Return a report on all actively running jobs from a job id centric salt-run jobs.activejobs.list_job: salt-run jobs.list_j…

pthread_join/pthread_exit用法实例

函数pthread_join用来等待一个线程的结束。函数原型为&#xff1a;   extern int pthread_join __P ((pthread_t __th, void **__thread_return));   第一个参数为被等待的线程标识符&#xff0c;第二个参数为一个用户定义的指针&#xff0c;它可以用来存储被等待线程的返回…

thinkphp5 内置接口开发与使用

最近的一个项目在用tp5&#xff0c;对于tp3都几乎没用过的我来说~~~ tp5最好的一点就是对接口的单独封装&#xff0c;只要严格按照要求一步一步来就可以成功了 开启命令行&#xff1a;配置环境变量安装tp5项目cmd进入项目目录&#xff0c;运行php think&#xff0c;出现如下内容…

Halcon2019软件安装教程

文章目录1、halcon介绍2、安装halcon-19.11.0.0-windows.exe1、下载halcon-19.11.0.0-windows.exe安装包2、halcon-19.11.0.0-windows.exe软件安装3、验证Halcon安装1、halcon介绍 HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包&#xff0c;拥有应用广泛的机器视…

爬虫常用库的安装

请求库(requests,selenium)、解析库(beautifulsop)、存储库、工具库等 urelib re 上面这两个是python自带的库 需要自己安装额库&#xff1a; (在windows下&#xff0c;使用pip install 命令) requests selenium用来驱动浏览器&#xff0c;做自动化测试&#xff0c;一些被js…

Python: 编程遇到的一些问题以及网上解决办法?

0.Python: TypeError: str does not support the buffer interface,(点我) fp.write(url.encode("utf-8")) 1.Python:object of type Response has no len()&#xff0c;如何解决&#xff1f;(点我) Traceback (most recent call last):File "F:/Python/TD.py&q…

快排简要介绍

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>Title</title></head> <body> <script> var arr [6,10,2,9,3,8,11,4,5]; function quickSort(data, start, end) { // 确定要…

在django中使用celery

前言: 针对高延时任务, 直接在一次网络请求中处理完毕会导致很不好的体验, celery则可以不阻塞请求后台处理这些任务, 并且可以使用django的models进行数据库操作.环境 python models: celery-4.1.1redis-2.10.6django-1.11.7其他: redis-3.2.9macospython3.6创建django工程 dj…

关于pragma pack的用法(一)

一个很重要的参数#pragma pack(n)数据边界对齐方式:以如下结构为例: struct {char a;WORD b;DWORD c;char d;}在Windows默认结构大小: sizeof(struct) 444416;与 #pragma pack(4)一样若设为 #pragma pack(1), 则结构大小: sizeof(struct) 12418;若设为 #pragma pack(2), 则…

TCL语言笔记:TCL中的String命令

一、介绍 字符串是 Tcl 中的基本数据类型&#xff0c;所以有大量的字符串操作命令。一个比较重要的问题就是模式匹配&#xff0c;通过模式匹配将字符串与指定的模式&#xff08;格式&#xff09;相匹配来进行字符串的比较、搜索等操作。 二、string命令列表 命 令 说 …

一文学会,胶位偏移、缺胶、断胶、溢胶检测

文章目录检测任务检测思路点胶质量检测代码及解析图示处理思路博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 检测任务 点胶检查检测以下缺陷&#xff1a; 1.缺少粘合胶的部分&#xff08;断胶&#xff09; 2.粘合剂过多或过少的部分&#x…

『转载』hadoop2.x常用端口、定义方法及默认端口

『转载』hadoop2.x常用端口、定义方法及默认端口1.问题导读 DataNode的http服务的端口、ipc服务的端口分别是哪个&#xff1f;NameNode的http服务的端口、ipc服务的端口分别是哪个&#xff1f;journalnode的http服务的端口、ipc服务的端口分别是哪个&#xff1f;ResourceManage…

宏定义和内联函数的学习

宏定义可以提高效率&#xff0c;但是宏不是函数。 预编译通过代码复制的方式代替函数调用&#xff0c;省去了诸如函数压栈等系统过程&#xff0c;从而提高了效率。但是由于宏定义仅仅是代码替换&#xff0c;所以引起很多问题。#define MAX(a&#xff0c;b) (a) > (b) ? (…

HAProxy介绍及配置文件详解

一、HAProxy简介 HAProxy是一个开源的、高性能的、基于TCP和HTTP应用的负载均衡软件&#xff0c;借助HAProxy可快速、可靠地提供基于TCP和HTTP应用的负载均衡解决方案 二、HAProxy优点 1) 可靠性和稳定性非常好&#xff0c;可以与硬件的F5相媲美2) 最高可以同时维护40000--5000…

unbutu安装搜狗输入法【转载】

安装支持库 sudo apt-get install fcitx libssh2-1 如果安装过程中出现错误失败&#xff0c;运行apt-get -f install 查看支持库是否安装成功 dpkg -l | grep fcitx dpkg -l | grep libssh 下载搜狗输入法 wget "http://pinyin.sogou.com/linux/download.php?flinux&…