halcon/c++接口基础 之 控制参数

HALCON/C++可以处理各种不同类型的字母数字混合的控制参数,如下:

  • 离散数字(long)
  • 浮点数字(double)
  • 字符串(char*)

控制参数的一个特殊形式是句柄,提供了途径去访问复杂的数据类型,像windows,图像获取设备,用于形状匹配的模型。实际上,在内部,句柄总是以离散数字(long)表示。

HALCON/C++使用tuple表示控制参数的容器类。另外,tuple是多态的,可以包含各种类型的参数。为了实现这个目的,HCtrlVal被介绍,请看下一节。

The Basic Class for Control Parameters

HCtrlVal是类HTuple的基类,并且一般对于用户隐藏。因为它仅仅用于临时的类型转换。核心点时它包含三种基本的控制参数类型,即离散数字(long),浮点类型(double),字符串类型(char*)。HCtrlVal提供了以下成员函数:

typedef long long Hlong;HCtrlVal(void)
Default constructor. HCtrlVal(Hlong l)
Constructing a value from long.HCtrlVal(int l)
Constructing a value from int.HCtrlVal(double d)
Constructing a value from double. HCtrlVal(const char *s)
Constructing a value from char *. HCtrlVal(const HCtrlVal &v)
Copy constructor. ~HCtrlVal(void)
Destructor. HCtrlVal& operator = (const HCtrlVal &v)
Assignment operator. int ValType() const
Type of a value (O: Hlong, int; 1: float, double; 2: string). 
见:
enum HCtrlType {LongVal   = LONG_PAR, DoubleVal = DOUBLE_PAR,StringVal = STRING_PAR,UndefVal  = UNDEF_PAR
};operator int(void) const
Conversion to int. operator Hlong(void) const
Conversion to long. operator double(void) const
Conversion to double. operator const char*(void) const
Conversion to char *. double D() const
Accessing a value and conversion to double. Hlong L() const
Accessing a value and conversion to Hlong. int I() const
Accessing a value and conversion to int. const char *S() const
Accessing a value and conversion to char *. HCtrlVal operator + (const HCtrlVal &val) const
Adding two values. HCtrlVal operator - (const HCtrlVal &val) const
Subtracting two values. HCtrlVal operator * (const HCtrlVal &val) const
Multiplying two values. HCtrlVal operator / (const HCtrlVal &val) const
Division of two values. 

这里面和我们前面介绍的HPixVal与int等各类型的转换相似,HCtrlVal也提供了与基本类型的相互转换和封装。

另外有几个转换函数比较重要:

  • double D() const
    Accessing a value and conversion to double.

  • long L() const
    Accessing a value and conversion to long.

  • int I() const
    Accessing a value and conversion to int.

  • const char *S() const
    Accessing a value and conversion to char *.

Tuples

HTuple建立在HCtrlVal的基础上。它实现了动态长度的HCtrlVal对象的数组。默认的构造函数定义了一个空的数组(Num()==0)。并且数组可以通过赋值动态地扩展。内存管理,如重新分配、释放,也由类自身管理。访问数组的序号是0到Num()-1

下面介绍几个重要的成员函数,更详细地请访问:%HALCONROOT%\include\cpp。

  • HTuple(int length, const HTuple \&value)
    构造指定长度的常数组,同 tuple_gen_const.
  • HCtrlVal &operator [] (int i)
    设置第i个元素
  • HCtrlVal operator [] (int i) const
    读取第i个元素

数组算术运算

  • HTuple operator + (const HTuple &val) const
    Adding two tuples element by element, similar to the operator tuple_add. The arrays have to be of the same size.

  • HTuple operator + (double &val) const
    HTuple operator + (int &val) const
    Adding a number to each element of the tuple, similar to the operator tuple_add.

  • HTuple operator - (const HTuple &val) const
    Subtracting two tuples element by element, similar to the operator tuple_sub. The arrays have to be of the same size.

  • HTuple operator - (double &val) const
    HTuple operator - (int &val) const
    Subtracting a number from each element of the tuple, similar to the operator tuple_sub.

  • HTuple operator * (const HTuple &val) const
    Multiplying two tuples element by element, similar to the operator tuple_mult. The arrays have to be of the same size.

  • HTuple operator * (double &val) const
    HTuple operator * (int &val) const
    Multiplying a number with each element of the tuple, similar to the operator tuple_mult.

  • HTuple operator / (const HTuple &val) const
    Division of two tuples element by element, similar to the operator tuple_div. The arrays have to be of the same size.

  • HTuple operator / (double &val) const
    HTuple operator / (int &val) const
    Division of each element of the tuple by a number, similar to the operator tuple_div.

例1

#include "HalconCpp.h"
using namespace Halcon;
#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endifvoid main()
{HTuple  t;cout << t.Num() << '\n';             // The length of the tuple is 0t[0] = 0.815;                        // Assigning values to the tuplet[1] = 42;t[2] = "HAL";cout << t.Num() << '\n';             // The length of the tuple is 3cout << "HTuple = " << t << '\n';    // Using the << operator double d = t[0];                     // Accessing the tuple, if theint   l = t[1];                     // the types of the elements//Hlong l=t[1];const char  *s = t[2];               // are known// Accessing the tuple, if the types of the elements are knownprintf("Values: %g %ld %s\n", t[0].D(), t[1].L(), t[2].S());
}

句柄封装类

最突出的类是HWindow.自从Halcon 6.1开始,HALCON/C++也提供了访问文件或者功能的句柄类,如图像获取装置,测量,或者基于形状的匹配。

Windows

HWindow以很方便的方式提供了Halcon窗口,halcon窗口的属性很容易改变。并且图像、区域、多边形等都可以显示在窗口上。下面列举常用的成员函数:


创建窗口:

  • HWindow(int Row=0, int Column=0,
    int Width=-1, int Height=-1,
    int Father = 0, const char *Mode = “”,
    const char *Host = “”)
    Default constructor. The constructed window is opened.

  • ~HWindow(void)
    Destructor. This closes the window.

  • void Click(void) const
    等待用户在窗口点击鼠标

  • HDPoint2D GetMbutton(int *button) const
    HDPoint2D GetMbutton(void) const

    获取鼠标点击时的坐标,和鼠标的类型。见 get_mbutton.
    鼠标类型:
    1:
    Left button,
    2:
    Middle button,
    4:
    Right button.

  • HDPoint2D GetMposition(int *button) const
    HDPoint2D GetMposition(void) const
    获取鼠标的位置和鼠标的点击类型,不要求鼠标一定要点击。见 get_mposition.

  • HCircle DrawCircle(void) const
    Waiting for the user to draw a circle in the window, see the reference manual entry of draw_circle.

  • HEllipse DrawEllipse(void) const
    Waiting for the user to draw an ellipse in the window, see the reference manual entry of draw_ellipse.

  • HRectangle1 DrawRectangle1(void) const
    Waiting for the user to draw a rectangle parallel to the coordinate axis in the window, see the reference manual entry of draw_rectangle1.

  • HRectangle2 DrawRectangle2(void) const
    Waiting for the user to draw a rectangle with an arbitrary orientation and size in the window, see the reference manual entry of draw_rectangle2.

例2

#include "HalconCpp.h"
using namespace Halcon;void main()
{HImage  image("E:\\halcon\\images\\control_unit.png");     // Reading an image from a fileHWindow w;                         // Opening an appropriate windowimage.Display(w);                  // Display the imagew.SetLut("change2");               // Set a lookup tablew.Click();                         // Waiting for a mouse clickw.SetLut("default");               // Set the default lookup tablew.SetPart(100, 100, 200, 200);        // Set a part of the windowimage.Display(w);w.Click();// Adapting the part to the image againw.SetPart(0, 0, image.Height() - 1, image.Width() - 1);image.Display(w);HRegionArray regs = image.Regiongrowing(1, 1, 4, 100);w.SetDraw("margin");w.SetColored(6);regs.Display(w);w.Click();image.Display(w);w.SetShape("rectangle1");regs.Display(w);
}

窗口在从文件中读取图像后打开,这意味着窗口被缩放到图像的大小。
The lookup table is changed afterwards, and the program waits for a mouse click in the window. A part of the image is zoomed now, and the program waits again for a mouse click in the window. By applying a region growing algorithm from the HALCON library (Regiongrowing) regions are generated and displayed in the window. Only the margin of the regions is displayed. It is displayed in 6 different colors in the window. The example ends with another way of displaying the shape of regions. The smallest rectangle parallel to the coordinate axes surrounding each region is displayed.


打赏

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

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

相关文章

Java编程的逻辑 (84) - 反射

​本系列文章经补充和完善&#xff0c;已修订整理成书《Java编程的逻辑》&#xff0c;由机械工业出版社华章分社出版&#xff0c;于2018年1月上市热销&#xff0c;读者好评如潮&#xff01;各大网店和书店有售&#xff0c;欢迎购买&#xff0c;京东自营链接&#xff1a;http://…

灰度图像的8位平面分解

所谓灰度图像&#xff0c;即指8位256颜色的图像。将图像的每一位分别取出来&#xff0c;我们就可以将一幅图像分解开来&#xff0c;形成8幅图像。下面我们分别介绍使用matlab分解图像与使用halcon/c分解图像的方法。 matlab8位分解 clc; clear all; A imread(lena.tif); % 显…

css 横线_atom.css正式发布,从此跟CSS框架说拜拜。

atom.css 大家好&#xff0c;我写了一个css库atom.css&#xff0c;蛮好用的&#xff0c;所以忍不住分享给大家。(https://github.com/MatrixAge/atom.css)起因写HTML几年了&#xff0c;再到如今的JSX&#xff0c;最大的感受不是枯燥&#xff0c;而是眼花。写样式的时候&#xf…

halcon模板匹配学习(一) Matching 初印象

什么是模板匹配呢&#xff1f;简单而言&#xff0c;就是在图像中寻找目标图像&#xff08;模板&#xff09;&#xff0c;或者说&#xff0c;就是在图像中寻找与模板图像相似部分的一种图像处理技术。依赖于选择的方法不同&#xff0c;模板匹配可以处理各种情形下的变换&#xf…

第五章 面向方面编程___AOP入门

上一篇讲了 AOP 和 OOP 的区别&#xff0c;这一次我们开始入门 AOP 。实现面向方面编程的技术&#xff0c;主要分为两大类&#xff1a; 一是 采用动态代理技术&#xff0c;利用截取消息的方式&#xff0c;对该消息进行装饰&#xff0c;以取代原有对象行为的执行&#xff1b; 二…

java将xml中的标签名称转为小写_深入学习Java Web(七): JSTL标签库

本文转自与博客园一杯凉茶的博客.在之前我们学过在JSP页面上为了不使用脚本&#xff0c;所以我们有了JSP内置的行为、行为只能提供一小部分的功能&#xff0c;大多数的时候还是会用java脚本&#xff0c;接着就使用了EL表达式&#xff0c;基本上EL表达式看似能满足我们的要求&am…

halcon模板匹配学习(二) 准备模板

如下&#xff0c;我们将介绍匹配的第一个操作&#xff1a;准备模板 初始时刻&#xff0c;我们准备好参考图像&#xff0c;并对其做一定的处理&#xff0c;然后我们需要从参考图像中导出模板&#xff0c;也就是将参考图像裁剪成所谓的模板图像。获取模板图像可以通过设置ROI来完…

揭秘继承技术之虚函数

虚函数 调用虚函数时函数行为将根据对象所属类的不同而变化。 父类指针或引用指向子类对象时&#xff0c;可访问子类重写方法&#xff08; virtual函数&#xff09;但无法访问在父类中没有定义的子类方法和数据成员。 #include <iostream>using namespace std;class Supe…

js 数组移除_2020前端面试--常见的js面试题

&#xff08;答案持续更新...&#xff09; 1.简述同步和异步的区别js是一门单线程语言&#xff0c;所谓"单线程"&#xff0c;就是指一次只能完成一件任务。如果有多个任务&#xff0c;就必须排队&#xff0c;前面一个任务完成&#xff0c;再执行后面一个任务&#xf…

spring-自动加载配置文件\使用属性文件注入

在上一篇jsf环境搭建的基础上 , 加入spring框架 , 先看下目录结构 src/main/resources 这个source folder 放置web项目所需的主要配置,打包时,会自动打包到WEB-INF下 首先看下pom.xml,需要引入一些依赖项: 1 <project xmlns"http://maven.apache.org/POM/4.0.0" x…

pygame碰撞检测

最近在学Pygame,花一段时间做了一个异常简陋版的"打砖块". 这次重点说一下困扰我比较长时间的碰撞检测(个人太菜..). 按照网上教程比较普遍的方法(也可能是我没看见别的),碰撞检测依次计算移动物体与被碰撞物体各个边之间坐标是否相交.例如下列代码,检测小球与窗口的…

2017-5-4 进程

进程&#xff1a;一个应用程序就是一个进程开启某个进程Process.Start("文件缩写名");通过绝对路径开启某个进程Process p new Process();p.StartInfo new ProcessStartInfo("要打开的程序绝对路径");p.Start(); 获取全部开启的进程&#xff1a;Process.…

c++分治法求最大最小值实现_程序员:算法导论,分治法、归并排序,伪代码和Java实现...

分治法我们首先先介绍分治法。分治法的思想&#xff1a;将原问题分解为几个规模较小但类似于原问题的子问题&#xff0c;递归地求解这些子问题&#xff0c;然后在合并这些子问题的解来解决原问题的解。还是拿扑克牌举例子&#xff0c;假设桌上有两堆牌面朝上的牌(牌面朝上&…

halcon相关的链接

论坛、培训 halcon学习网&#xff1a;http://www.ihalcon.com/鸟叔机器视觉&#xff1a;http://bbs.szvbt.com/forum.php 博客 韩兆新的博客园majunfuLife and Codingzhaojun的博客風韻無聲骑蚂蚁上高速的博客小马_xiaoLV2小新识图程序园-程序员的世界章柯渊的博客 注&…

python opencv图像处理程序_Python-OpenCV学习(四):基本图像处理

转载请注明出处&#xff1a;danscarlett的博客园 参考资料&#xff1a; 目录&#xff1a; 读取 imread 显示 imshow 存储 imwrite 缩放 resize 加边框 copyMakeBorder 裁剪 img[x_start:x_end,y_start:y_end] 1.图像读取&#xff1a; cv2.imread(fileName,flagsNone) 函数功能&…

分针网——怎么轻松学习JavaScript

js给初学者的印象总是那么的“杂而乱”&#xff0c;相信很多初学者都在找轻松学习js的途径。我试着总结自己学习多年js的经验&#xff0c;希望能给后来的学习者探索出一条“轻松学习js之路”。js给人那种感觉的原因多半是因为它如下的特点&#xff1a;A&#xff1a;本身知识很抽…

python时间序列分析航空旅人_用python做时间序列预测一:初识概念

利用时间序列预测方法&#xff0c;我们可以基于历史的情况来预测未来的情况。比如共享单车每日租车数&#xff0c;食堂每日就餐人数等等&#xff0c;都是基于各自历史的情况来预测的。 什么是时间序列&#xff1f; 时间序列&#xff0c;是指同一个变量在连续且固定的时间间隔上…

[Logstash-input-redis] 使用详解

2019独角兽企业重金招聘Python工程师标准>>> Redis插件参数配置详解 工作流程 logstash启动redis插件redis插件获取参数&#xff0c;进行校验工作判断监听模式(list,channel,pattern_channel等)&#xff0c;根据不同的监听模式创建监听任务创建redis实例&#xff0c…

雅可比旋转求解对称二维矩阵的特征值和特征向量

问题描述&#xff1a; 给定一个矩阵&#xff0c;如下&#xff1a; A[a11a21a12a22]A=\begin{bmatrix} a_{11}&a_{12}\\ a_{21}& a_{22} \end{bmatrix} 其中满足a12a21.也就是所谓的 对称矩阵。那么如何求解此矩阵的特征值以及特征向量呢&#xff1f;这里我们要用到 …

python画图数据的平均值怎么算的_Python气象数据处理与绘图(2):常用数据计算方法...

对于气象绘图来讲&#xff0c;第一步是对数据的处理&#xff0c;通过各类公式&#xff0c;或者统计方法将原始数据处理为目标数据。 按照气象统计课程的内容&#xff0c;我给出了一些常用到的统计方法的对应函数&#xff1a; import numpy as np 平均值 在计算气候态&#xff0…