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.pswp.cn/news/258900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258900.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258900.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Wifi簡單的梳理【轉】

本文轉載自&#xff1a;http://blog.csdn.net/gabbzang/article/details/10005411 代表一個已經配置過的網絡。包含網絡ID(networkId)、該網絡ID代表的網絡的BSSID和SSID、加密機制、密碼等信息。 WifiInfo&#xff1a; 代表一個正在建立或者已經建立的網絡連接。該網絡的BSSID…

fenby C語言 P30

int a[5]&#xff0c;*pa; int a[5],*p&a[0]; #include <stdio.h> int main(void){ int a[5],*pa,i; for(i0;i<5;i) { *p1; p; }pp-5;for(i0;i<5;i,p)printf("%d\n",*p);return 0;}轉載于:https://www.cnblogs.com/amiaojiang/p/4507114.html

bat自動輸入用戶名和密碼_「小白到大牛之路6」交換機后臺管理之重復輸入用戶名和密碼...

項目需求解決項目5中存在的問題&#xff1a;用戶名和密碼只能輸入一次。如果輸入錯誤&#xff0c;就沒有機會重新輸入。項目實現#include int main(void) {// 定義變量&#xff0c;用來表示用戶名和密碼char name[32];char password[16];//輸入用戶名和密碼while (1) {// 輸入用…

并行計算簡介

轉自&#xff1a;http://www.cnblogs.com/wasd/archive/2009/04/07/1430859.html 并行計算簡介 作者&#xff1a; Blaise Barney, 勞倫斯利弗莫爾國家實驗室 譯者&#xff1a;盧洋&#xff0c;同濟大學&#xff0c;2009年4月 原文地址&#xff1a;https://computing.llnl.gov/t…

開場 Live,分享點干貨——「深入了解 Node.js 包與模塊機制」

先放上 Live 地址&#xff1a; www.zhihu.com/lives/84274… 本次 Live 將深入剖析 Node.js 包與模塊機制&#xff0c;包括且不限于解析 Node.js 源碼、社區規范等。本人認為這是作為一個合格 Node.js 開發者哪怕是不深入也要了解的姿勢之一。 本次 Live 主要包括以下內容&…

halcon/c++接口基礎 之 析構函數和Halcon算子

所有的HALCON/C類都提供了默認的析構函數用來自動銷毀對應的內存。對于某些類&#xff0c;析構函數基于適合的算子&#xff1a; Windows: HWindow類的析構函數基于close_window關閉窗口。注意&#xff1a;算子本身不是析構器。你可以選擇調用CloseWindow關閉窗口&#xff0c;…

140字

跑男他們這一組做的游戲&#xff0c;首先按任務來 他們做的技術難度很高感覺。需要在android里面用flash我自己從來沒有接觸過。而且制作的難度也很大&#xff0c;反正就目前難度系數來說的話&#xff0c;可以秒殺我的DB天氣了。然后就是吐槽的也是我最不能忍的就是美化方面做得…

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…

tomcat 禁用access.log

修改 server.xml 注釋掉,如: <!-- Access log processes all example.Documentation at: /docs/config/valve.htmlNote: The pattern used is equivalent to using pattern"common"<Valve className"org.apache.catalina.valves.AccessLogValve" dir…

bzoj 3505

3505: [Cqoi2014]數三角形 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 698 Solved: 424[Submit][Status][Discuss]Description 給定一個nxm的網格&#xff0c;請計算三點都在格點上的三角形共有多少個。下圖為4x4的網格上的一個三角形。 注意三角形的三點不能共線。 In…

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;會很不方便。因…

DbEntry在Vs2012里的配置

dbentry官方的版本還不支持vs2012&#xff0c;要再vs2012中使用&#xff0c;必須做下調整 1&#xff1a;新建類庫項目&#xff0c;然后添加dbentry 的dll引用。 2&#xff1a;在建好的類庫項目中.csproj 新添加了類庫項目后&#xff0c;在他的項目文件.csproj用記事本打開&…

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…