halcon基础数据类型详解

#if defined(__CHAR_UNSIGNED__) || defined(__sgi)
#define  INT1      signed char       /* integer, signed 1 Byte         */
#define  INT1_MIN  SCHAR_MIN
#define  INT1_MAX  SCHAR_MAX
#else
#define  INT1      char              /* integer, signed 1 Byte         */
#define  INT1_MIN  CHAR_MIN
#define  INT1_MAX  CHAR_MAX
#endif
#define  UINT1     unsigned char     /* integer, unsigned 1 Byte       */
#define  UINT1_MIN 0
#define  UINT1_MAX UCHAR_MAX

#define LONG_FORMAT _INT64_FORMAT
typedef INT4_8  Hlong;
typedef UINT4_8 Hulong;

  看粗体部分,可以看到 Hlong型在32位的机器上其实就是long型 代表4个字节 32位,在64位机器上有另一种定义

  再来看看halcon中最重要的数据类型HTuple,在C++里面,halcon将HTuple类型封装了类,其始祖类HRootObject,这个类相当于MFC里面的CObject,halcon从HRootObject派生了HBaseArray,当然这两个类是虚基类,有一些方法需要我HTuple自己实现,当然也有一些方法可以直接用的。这两个类在HCPPUtil里,可以看看。

  HTuple类就是从HBaseArray派生,元组基类,相当于数组,具有如下的构造函数:

  

  HTuple(int l);
  HTuple(float f);
  HTuple(double d);
  HTuple(const char *s);
  HTuple(const HCtrlVal &c);
  HTuple(const HTuple &in):HBaseArray() {CopyTuple(in);}
  HTuple(Hlong length, const HTuple &value);
  HTuple(const HTuple &length, const HTuple &value);
  HTuple(SpecialTuple d);

  

  HTuple对各种操作符进行了重载:

  operator     HCtrlVal(void) const;
  HTuple       operator () (Hlong min, Hlong max) const;
  HTuple       operator () (const HTuple &min, const HTuple &max) const;
  HCtrlVal    &operator [] (Hlong index);
  HCtrlVal     operator [] (Hlong index) const;
  HCtrlVal    &operator [] (const HTuple &index);
  HCtrlVal     operator [] (const HTuple &index) const;
  HTuple      &operator ++ (void); // nur fuer double und Hlong
  HBool        operator !  (void) const;
  HTuple       operator ~  (void) const;
  HTuple       operator << (const HTuple &val) const;
  HTuple       operator << (Hlong val) const;
  HTuple       operator >> (const HTuple &val) const;
  HTuple       operator >> (Hlong val) const;
  HTuple       operator +  (const HTuple &val) const;
  HTuple       operator +  (double val) const;
  HTuple       operator +  (int val) const;

  在讲解halcon是如何维护这样一个HTuple中各种数据之前 ,先来看看这样一个类:

  

class LIntExport HCtrlVal  {
  friend class HTuple;
public:
  HCtrlVal(void)      {val.type  = UndefVal;  val.par.l = 0;}
#if !defined(_TMS320C6X)
  HCtrlVal(Hlong l)   {val.type  = LongVal;   val.par.l = l;}
#endif
  HCtrlVal(int l)     {val.type  = LongVal;   val.par.l = l;}
  HCtrlVal(double d)  {val.type  = DoubleVal; val.par.f = d;}
  HCtrlVal(const char *s);
  HCtrlVal(const HCtrlVal &v) {CopyCtrlVal(v);}
  ~HCtrlVal(void)             {ClearCtrlVal();}
  HCtrlVal& operator = (const HCtrlVal &v);

  // Type conversion
  int         ValType() const          {return val.type;}
  operator    int(void) const          {return I();}
#if !defined(_TMS320C6X)
  operator    Hlong(void) const        {return L();}
#endif
  operator    double(void) const       {return D();}
  operator    const char*(void) const  {return S();}
  operator    const Hcpar&(void)const  {return HCPAR();}
  // Access contents
  double          D() const;
  Hlong           L() const;
  int             I() const;
  const char *    S() const;
  const Hcpar&    HCPAR()const;
  // Arithmetics
  HCtrlVal     operator + (const HCtrlVal &val) const;
  HTuple       operator + (const HTuple &val) const;
  HCtrlVal     operator - (const HCtrlVal &val) const;
  HTuple       operator - (const HTuple &val) const;
  HCtrlVal     operator * (const HCtrlVal &val) const;
  HTuple       operator * (const HTuple &val) const;
  HCtrlVal     operator / (const HCtrlVal &val) const;
  HTuple       operator / (const HTuple &val) const;
  HCtrlVal     operator % (const HCtrlVal &val) const;
  HTuple       operator % (const HTuple &val) const;
  HBool        operator != (const HCtrlVal &val) const;
  HBool        operator != (const HTuple &val) const;
  HBool        operator == (const HCtrlVal &val) const;
  HBool        operator == (const HTuple &val) const;
  HBool        operator >= (const HCtrlVal &val) const;
  HBool        operator >= (const HTuple &val) const;
  HBool        operator <= (const HCtrlVal &val) const;
  HBool        operator <= (const HTuple &val) const;
  HBool        operator > (const HCtrlVal &val) const;
  HBool        operator > (const HTuple &val) const;
  HBool        operator < (const HCtrlVal &val) const;
  HBool        operator < (const HTuple &val) const;

  const char *ClassName(void) const { return "HCtrlVal"; }
  int Version(void) const;
  int Revision(void) const;
  const char *Creation(void) const;

private:
  // Data
  Hcpar       val;        // Value: one of the three types and type specifyer
  // Support operationen
  void ClearCtrlVal();
  void CopyCtrlVal(const HCtrlVal& source);
};
typedef struct
{
  Hpar   par;             /* values                                          */
  INT1   type;            /* type flag                                       */
} Hcpar;                  /* parameter passing for the C interface           */
typedef union
{
  INT4_8  l;              /* 4/8 byte integer                       (input)  */
  double  f;              /* 8 byte real                            (input)  */
  char    *s;             /* pointer to strings                     (input)  */
} Hpar;                   /* parameter passing for the C interface           */
typedef union
{
  INT4_8  *l;             /* 4/8 byte integer                       (output) */
  double  *f;             /* 8 byte real                            (output) */
  char    *s;             /* pointer to strings                     (output) */
  VOIDP   p;              /* pointer to var. of any type (e.g. tuple)(output)*/
} Hvar;                   /* parameter passing for the C interface           */

  仔细看我用红色粗体并加大的部分,这四段代码可以说是halcon维护HTuple这种数据类型的精髓了。下面我们来讲解一下:

  首先HTuple类中有私有成员变量:

private:
  HCtrlVal    *tuple;       // values (array of Hlong/float/string)

  halcon给的注释写的很清楚,tuple是一群值,指向一个数组,数组里面有long型,浮点型及字符串型数据。这是一个指针,这个类就是维护这样一个指针,具体此指针的内容,我们往下看HCtrlVal: (这里说一下这几个单词的意义吧:H->Halcon   Ctrl->Control   Val->Values  表示Halcon的控制变量,当然还有图形变量,以后再讲吧。)

private:
  // Data
  Hcpar       val;        // Value: one of the three types and type specifyer

  HCtrlVal类就维护了这样一个成员变量,halcon给的注释是说 val 代表数据的三种类型中的一个,并指向一个值。那么HTuple中的tuple指针就是维护了val组成的链表,这样HTuple就可以维护多种不同类型的数据。

  HTuple用起来的确很方便,halcon对其进行了大量的运算符重载包括像强制类型转换,都不需要我们手动去做,只需要在前面加个数据类型就行了。

  好了,由于本人水平有限,文中可能会有纰漏,敬请指出!

  added by xiejl

halcon基础数据类型详解

时间: 2024-10-10 16:12:58

halcon基础数据类型详解的相关文章

redis--(二)基础数据类型详解

String类型 Hash类型 List类型 flushdb 清空所有 上图片中 2表示:删除个数 set类型 zset类型

Nmap扫描教程之基础扫描详解

Nmap扫描教程之基础扫描详解 Nmap扫描基础扫描 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以分别对主机.端口.版本.操作系统等实施扫描.但是,在实施这些扫描工作之前,需要先简单了解下Nmap工具的使用,以方便后面实施扫描.所以,本章将通过使用Nmap工具实施基础的扫描,来帮助用户了解该工具. Nmap扫描扫描概述 在实施基本的扫描之前,需要先了解一些Nmap网络扫描的基本知识,及需要考虑的一些法律边界问题.本节将对网络基本扫描进行一个简单介

jmeter 基础功能详解

jmeter 基础功能详解 thread group:包含一组线程,每个线程独立地执行测试计划. sampler:采样器,有多种不同的sample实现,用来发起各种请求,如http请求,jdbc请求,javaTest请求等等. logic controller:逻辑控制器有多种不同的实现,可以决定每个sample的执行顺序. listener:有多种不同的实现,主要用于统计测试接话运行中的数据并展示,如可以进行图形化方式展示响应时间. timer:定时器,有多种不同的实现,可用作每个请求见的停顿

Linux上命令的使用格式和基础命令详解

一.Linux上命令的使用格式 命令行提示符详解: 用户通过终端的命令行接口来控制操作系统,登陆后如下: [[email protected] ~]# root: 当前登录的用户 @:分隔符 localhost: 当前主机的主机名,非完整格式:此处的完整格式为:localhost.localdomain [[email protected] ~]# hostname localhost.localdomain ~:用户当前所在的目录(current directory),也称为工作目录(work

PHP100-第三讲 PHP5.4 语法、常量、变量、数据类型详解

内容摘要: ①PHP5.4 的基本语法与写作格式 ②PHP5.4 的变量与变量数据类型 ③PHP5.4 的系统常量与自定义常量 PHP5.4 的基本语法与写作格式: 任何程序语言都有自己的语言风格,PHP语言也有自己独特的风格,虽然也继承了许多Perl和C的语言特色.但经过多年的发展PHP已经成为了一个成熟 的编程语言,所以我们还需要认真的学习PHP的独特语法.PHP一个很大的特色就是与HTML标签语言进行混编,这种模式是今后很长一段学习过程中所用到 的格式,因此我们先来通过一个例子来认识一下P

MySQL 数据类型 详解

MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补. 1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3个字节 范围(-8388608~83

Mysql数据类型详解

MySQL数据类型包括 1.整数类型,浮点数类型和定点数类型 2.时间和日期类型 3.字符串类型 4.二进制类型 整数类型 标准的SQL中支持INTEGER,SMALLINT这两类整数类型,MySQL除了这两个还有其他的,见下表 类型 大小 范围(有符号) 范围(无符号) 默认宽度 TINYINT 1 字节 (-128,127) (0,255) 4 SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 6 MEDIUMINT 3 字节 (-8 388 608,8 3

MySQL 数据类型 详解 (转载)

数值类型 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补. 表列出了各种数值类型以及它们的允许范围和占用的内存空间. 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0,65

高性能Web服务之tomcat基础应用详解(一)

Tomcat概述: Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成.由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范.因为Tomcat 技术先进.性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目