halcon/c++接口基础 之 构造函数与Halcon算子

Halcon/C++提供了构造函数,主要基于适合的Halcon算子。比如说HImage和HBarCode基于read_image and create_bar_code_model。

请注意当前的Halcon版本针对不同的算子构造函数的功能不同。如下我们介绍了一些最常用的Halcon算子,而一个完整的构造函数列表可以在%HALCONROOT%\include\cpp中找到。

  • Images:

HImage基于算子read_image,gen_image1,gen_image1_extern,and gen_image_const提供了构造器。

在通过HImage使用其构造函数时请注意以下的陷阱:与直觉正好相反,该算子并不能修改调用它的实例,相反,被创建好的图像需要通过算子返回值返回。这样,我们看如下的代码,事实上并没有初始化图像.

HImage image;
image.ReadImage("barcode/ean13/ean1301"); // incorrect

正确的方法是:

image = HImage::ReadImage("barcode/ean13/ean1301"); // correct

从上面可以看出ReadImage是静态成员函数。
注意: HImage作为输出参数出现的任何算子都要注意这种陷阱,例如GrabImage.

  • Regions:

类HRegion提供了基于像gen_rectangle2 or gen_circle生成的构造函数。并且,也提供了直接的派生类HRectangle2 or HCircle.

请注意HRegion也表现了和HImage一样的陷阱。比如像GenRectangle2并不能直接修改调用它的实例HRegion,但是可以返回生成的初始化region.

  • XLDs:
    XLDs(HXLD,HXLDCont等等)没有提供相应的构造函数。

  • Windows:

类HWindow提供了基于open_window and new_extern_window的构造函数.注意:前者(指open_window)对于所有的参数可以使用默认值实现,这样就可以生成默认的构造器,因此一旦创建即打开。

当然了,你可以选择使用CloseWindow关闭窗口,然后使用OpenWindow再次打开它。

与图形化参数不同,你可以用一个直观的方式使用HWindow实例调用“类构造器”样的算子如OpenWindow。因此,对应的句柄被返回。

  • Other Handle Classes:

其他封装了句柄的类,如HBarCode 和 HFramegrabber,更系统地提供了构造函数:如果类作为输入参数出现在算子中,则自动存在一个基于此算子的构造函数。这样 ,基于create_bar_code_model创建了HBarcode,基于create_shape_model创建了HShapeModel,基于open_framegrabber创建了HFramegrabber.

与图形化的参数不同,句柄类允许用一个直观的方式使用类实例调用“类构造器”样的算子,并且调用对象被修改。比如,你可以创建一个带有默认构造器的HBarCode对象,并且使用CreateBarCodeModel初始化它。

HBarCode barcode;
barcode.CreateBarCodeModel(HTuple(), HTuple());

如果对象已经被初始化,在调用和重新初始化之前,原先的数据将自动销毁。

2.4 析构函数和Halcon算子

所有的HALCON/C++类都提供了默认的析构函数用来自动销毁对应的内存。对于某些类,析构函数基于适合的算子:

  • Windows:
    HWindow类的析构函数基于close_window关闭窗口。注意:算子本身不是析构器。你可以选择调用CloseWindow关闭窗口,并且使用OpenWindow再次打开它。

  • Other Handle Classes:
    其他句柄类的默认析构函数,如HShapeModel or HFramegrabber ,相应地应用了像clear_shape_model and close_framegrabber算子。与close_window不同,这些算子不能通过类对象调用,这个对于clear_all_shape_models一样适用。事实上,你没必要调用调用它,直接重新初始化即可,如5.2节描述的那样。

请注意: 你不能调用适用类对象来调用如下的算子:clear_shape_model,clear_all_shape_models, or close_framegrabber

2.5 Tuple模式

所谓tuple模式就是HALCON算子被调用。用这种模式,你可以使用一个简单的调用区处理许多图像或者区域。标准情况下,用一张单独的照片去调用一个算子叫做简单模式。一个算子是否支持这种tuple模式可以在查询手册中查询。比如,看下图5.5,展现了算子char_threshold的用法。

观察算子的说明,参数Image被描述成一个image(-array);这表明你可以应用此算子一次性到多个图片。

如果你使用多张图片调用算子char_threshold,比如说,用一个图像数组,那么输出参数也自动变为数组。因此,参数Characters and Threshold被描述成region(-array)和integer(-array).

注意观察图5.5的算子签名,我们发现面向过程的方法,调用char_threshold的简单模式和数组模式仅仅在输出参数Threshold上不同:一个指向long的指针,一个指向long的数组的指针。

面向对象的方法,简单模式和数组模式关于图形化参数使用了不同的类:HImage and HRegion vs.HImageArray and HRegionArray.正如面向过程的方法一样,控制参数可以是基本类型(仅仅简单模式)或者HTuple类型(简单和数组模式)

在看了理论上的介绍后,我们来看一个简单的例子。图5.6,char_threshold被应用于简单模式,即一幅单个的图片,图5.7 一次性应用于两张图片。

 HImageArray    images;HRegionArray   regions;HTuple         thresholds;for (int i=1; i<=2; i++){images[i-1] = HImage::ReadImage(HTuple("alpha") + i);}regions = images.CharThreshold(images[0].GetDomain(), 2, 95, &thresholds);for (int i=0; i<images.Num(); i++){images[i].Display(window);regions[i].Display(window);cout << "Threshold for 'alpha" << i+1 << "': " << thresholds[i].L();window.Click();
Hobject        images, image;Hobject        regions, region;long           num;HTuple         thresholds;gen_empty_obj(&images);for (int i=1; i<=2; i++){read_image(&image, HTuple("alpha") + i);concat_obj(images, image, &images);}char_threshold(images, image, &regions, 2, 95, &thresholds);count_obj(images, &num);for (int i=0; i<num; i++){select_obj(images, &image, i+1);disp_obj(image, window);select_obj(regions, &region, i+1);disp_obj(region, window);cout << "Threshold for 'alpha" << i+1 << "': " << thresholds[i].L();}

Figure 5.7: Using CharThreshold in tuple mode, via HImageArray, or in the procedural approach (declaration and opening of window omitted).

两个例子都使用面向对象和面向过程的方法实现。例子中概括了以下几个有趣的点:

  • 图形化数组的创建和初始化:
    在面向对象的方法中,图像数组可以通过众所周知的运算符[]来创建。而面向过程的方法,你必须使用gen_empty_obj创建一个空的对象(即数组),然后通过concat_obj增加图像。

  • 访问图形化对象
    正如所期望的那样,在面向对象的方法中,单个图像和区域可以通过[]来访问;数组的个数可以通过方法Num()来获得。而面向过程的方法中,对象必须显式地使用算子select_obj来获得;个数必须通过count_obj获得。

  • Hobject的多态性:(part I)
    正如已经提到的那样,Hobject的实例既可以使用简单模式也可以使用数组模式。但是与之相反的是,面向对象的方法中当从简单模式切换到数组模式时,你必须使用不同的类。

  • Hobject的多态性:(part II)
    Hobject可以用于所有图形化对象。并且,图像对象可以当做region使用作为参数。在这种情况下,图像的domain,即像素“有效”的区域(即ROI)
    自动提取。而面向对象的方法,你必须使用GetDomain显式地提取。

  • Array(tuple) indices:(数组目录)
    面向对象的图形化数组以0开始,比如对于HTuple就是这样。但是Hobject数组就是从1开始。

大多数时候,你将使用数组模式:只要你通过算子Connection将一个region分成连通的区域,你就将以HRegionArray结束。这样,任何子序列的处理,比如形态学处理,像DilationCircle or 或者使用AreaCenter计算region的位置都将自动在数组的所有区域中呈现,也就是数组模式。这样,数组模式终究也是一个简单的模式!


打赏

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

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

相关文章

bat自动输入用户名和密码_「小白到大牛之路6」交换机后台管理之重复输入用户名和密码...

项目需求解决项目5中存在的问题&#xff1a;用户名和密码只能输入一次。如果输入错误&#xff0c;就没有机会重新输入。项目实现#include int main(void) {// 定义变量&#xff0c;用来表示用户名和密码char name[32];char password[16];//输入用户名和密码while (1) {// 输入用…

halcon/c++接口基础 之 析构函数和Halcon算子

所有的HALCON/C类都提供了默认的析构函数用来自动销毁对应的内存。对于某些类&#xff0c;析构函数基于适合的算子&#xff1a; Windows: HWindow类的析构函数基于close_window关闭窗口。注意&#xff1a;算子本身不是析构器。你可以选择调用CloseWindow关闭窗口&#xff0c;…

ios 上传图片到阿里云的oss_JEECG BOOT 上传如何同时支持阿里OSS、Minio、本地存储

Jeecg-Boot 提供了文件及图片上传功能&#xff0c;前两个文件已介绍了MinIO和OSS配置&#xff0c;现在可根据需要选择上传方式。文件上传接口(图片/文件)在yml文件中可切换图片/文件存储方式访问路径上送参数说明在yml文件中可切换图片/文件存储方式local为本地存储minio为使用…

halcon/c++接口基础 之内存管理

所有的HALCON类&#xff0c;不仅仅HImage,HRegion,HTuple&#xff0c;HFramegrabber等等&#xff0c;还有面向过程的方法中使用的Hobject&#xff0c;都可以使用默认的析构器自动释放内存。 &#xff08; see also section 2.4 “Destructors and Halcon Operators”)&#xf…

python时间格式_python 格式化日期

常用的时间函数如下 获取当前日期&#xff1a;time.time() 获取元组形式的时间戳&#xff1a;time.local(time.time()) 格式化日期的函数(基于元组的形式进行格式化)&#xff1a; &#xff08;1&#xff09;time.asctime(time.local(time.time())) &#xff08;2&#xff09;ti…

halcon/c++接口基础 之异常处理

关于运行错误&#xff0c;HALCON/C默认打印错误信息并且终止程序。然而在某些应用中&#xff0c;放宽这个法则可能更有用。比如&#xff0c;如果一个应用要求用户交互式地指定一个图像文件读取&#xff0c;如果因为用户不能拼错文件名而终止程序的话&#xff0c;会很不方便。因…

SVN学习(二)——SVN 提交、更新、解决冲突等操作步骤

1. 纳入版本控制 ①新建文件abc.txt ②在文件上点右键 ③添加后文件图标发生变化 2. 提交 ①使用TortoiseSVN可以提交具体某一个文件&#xff0c;或某一个目录下的所有改变。方法就是在想要提交的项目下点右键&#xff0c;然后SVN Commit...&#xff0c;就可以看到如下界面 ②日…

dat文件打开乱码_5.2 实战1:解决在Linux下打开Windows汉字文本的乱码问题

今天MK继续来分享linux的学习文章&#xff0c;今天讲的主要是实战部分。1&#xff0e;实验环境&#xff1a;CentOS 7.5 现在系统默认使用的语言是汉语。&#xff08;系统中必须安装好中文包&#xff09;。2&#xff0e;在windows系统上编辑名字为“a此文件在windows下打开正常-…

整理:深度学习 vs 机器学习 vs 模式识别

发表于2015-03-24 22:58| 11934次阅读| 来源个人博客| 26 条评论| 作者Tomasz Malisiewicz 模式识别深度学习机器学习数据科学家摘要&#xff1a;本文我们来关注下三个非常相关的概念&#xff08;深度学习、机器学习和模式识别&#xff09;&#xff0c;以及他们与2015年最热门的…

halcon/c++接口基础 之 HALCON图像变量类

在HALCON/C中&#xff0c;HObject是一个基类&#xff0c;可以表示图像变量。另外还有三种类继承自HObject. Class HImage 处理图像Class HRegion 处理区域Class HXLD 处理多边形 Regions 一个region是图像平面坐标点的集合。这样一个区域不需要被连通&#xff0c;而且可能还…

新手求大神,有其他swit-case的思路写这个程序么?

两个程序: switch-case与if-else if的区别相同点:可以实现多分支结构;不同点:switch:一般只能用于等值比较.(可以进行范围运算???---学会用switch计算范围出炉的思路____待解决)if_else if:可以处理范围计算. switch(变量) { case 变量: break; } switch括号中的"变量…

netty简单笔记

2019独角兽企业重金招聘Python工程师标准>>> Server package com.netty;import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.channel.Channel…

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

HALCON/C可以处理各种不同类型的字母数字混合的控制参数&#xff0c;如下&#xff1a; 离散数字&#xff08;long&#xff09;浮点数字&#xff08;double&#xff09;字符串&#xff08;char*&#xff09; 控制参数的一个特殊形式是句柄&#xff0c;提供了途径去访问复杂的数…

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来完…