0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

全網(wǎng)最詳細解析Halcon自定義函數(shù)封裝方法

新機器視覺 ? 來源:CSDN技術(shù)社區(qū) ? 作者:小邢同學 ? 2021-04-22 11:01 ? 次閱讀

有網(wǎng)友說不太清楚這個halcon函數(shù)的封裝方法。今天寫個教程帖子,大家一起進步分享。

1、名詞解釋

算子:
指Halcon中最基礎(chǔ)、最底層的函數(shù)(即你看不到它的代碼實現(xiàn)),一個算子只有一句話,例如threshold算子。

函數(shù):
由多個算子組合成的函數(shù)。其特點是,可以通過鼠標右鍵單擊“顯示函數(shù)”打開。如下圖:

d2faea3a-a29b-11eb-aece-12bb97331649.png

d3093054-a29b-11eb-aece-12bb97331649.png

通常,Halcon代碼程序窗口中,算子和小函數(shù)的代碼顏色是有差異的。如下圖:

d31d3810-a29b-11eb-aece-12bb97331649.png

2、例子介紹

1、處理原圖與任務(wù):

要求求亮區(qū)外圓半徑大小。

2、代碼與解析:

* 讀入圖片 read_image (Image, ‘C:/Users/Administrator/Desktop/1.jpg’)

根據(jù)圖片打開窗口 dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)

顯示圖片,用于預(yù)覽 dev_display (Image)

二值化 binary_threshold (Image, Region, ‘max_separability’, ‘light’, UsedThreshold)

分割連通域 connection (Region, ConnectedRegions)

使用特征篩選去掉小面積區(qū)域的干擾 select_shape (ConnectedRegions, SelectedRegions, ‘a(chǎn)rea’, ‘a(chǎn)nd’, 5000, 1000000000)

合并區(qū)域,為下一步求取最小外接矩形做準備 union1 (SelectedRegions, RegionUnion)

求取最小外接矩形 smallest_circle (RegionUnion, Row, Column, Radius)

生成一個圓形,用于顯示 gen_circle (Circle, Row, Column, Radius)

*顯示結(jié)果前的準備 dev_clear_window () dev_set_draw (‘margin’) dev_set_line_width (3) dev_set_color (‘red’)

顯示相關(guān)結(jié)果 dev_display (Image) dev_display (Circle) disp_message (WindowHandle, ‘圓環(huán)半徑: ‘+Radius, ‘window’, 50, 50, ‘black’, ‘true’)

3、Halcon函數(shù)封裝方式

Halcon的函數(shù)創(chuàng)建分為以下幾個步驟:1、明確需求,要封裝的函數(shù)要實現(xiàn)什么功能 2、選取函數(shù)部分進行函數(shù)創(chuàng)建,更改函數(shù)接口,即更改輸入輸出變量 3、運行驗證與函數(shù)更改操作

①明確需求

我們拿上邊的這個程序舉例,我們這個程序完成的任務(wù)主要是:求取外接圓的半徑并且顯示

我們看代碼一共分為三個部分:1.準備階段:讀入圖片、打開窗口、預(yù)覽等工作。 2.處理階段:進行圖像處理,求取結(jié)果 3.顯示階段:對結(jié)果進行顯示 如下圖:

d3555b6e-a29b-11eb-aece-12bb97331649.png

明確1:我們需要將第二部分“處理階段的算子封裝成一個函數(shù)”

此時我們再看處理階段的代碼,我們由分析可知: 1、此段代碼需要一個圖片,用于圖像處理 2、需要得出圓環(huán)外接圓這個結(jié)果(外接圓的位置與半徑) 由此確定:傳入一個圖像變量,傳出外接圓的坐標(X,Y)與外接圓的半徑到此需求已經(jīng)明確。

②選取函數(shù)部分進行函數(shù)創(chuàng)建,更改函數(shù)接口

選中處理階段函數(shù),右鍵,點擊“創(chuàng)建新函數(shù)”。如下圖所示:

d397e0b0-a29b-11eb-aece-12bb97331649.png

之后顯示頁面如下:

d59880fe-a29b-11eb-aece-12bb97331649.png

首先點擊一般設(shè)置欄,編輯函數(shù)名稱(你想把這個函數(shù)名叫什么就命什么名),再點擊“參數(shù)”。 之后顯示頁面如下:

d5cb8c88-a29b-11eb-aece-12bb97331649.png

圖標參數(shù)含義:即圖片、區(qū)域、Xld輪廓等圖形變量。 變量參數(shù)含義:指我們在程序中用得到的整形、浮點型、字符串、數(shù)組等變量

我們可以點擊添加變量按鈕進行輸入輸出變量的添加操作 如果我們要進行刪除變量操作,操作方式如下圖: 首先選中變量,點擊移除

d5f902da-a29b-11eb-aece-12bb97331649.png

點擊移除后:

d61eb28c-a29b-11eb-aece-12bb97331649.png

也可以通過選中函數(shù)后點擊“上移”、“下移”更改變量順序。

我們由需求分析步驟可知,我們需要: 傳入一個圖像變量,傳出外接圓的坐標(X,Y)與外接圓的半徑 修改參數(shù)頁面變量如下,并點擊一般文檔切換欄目:

d6391406-a29b-11eb-aece-12bb97331649.png

一般文檔欄目:(可以對函數(shù)進行說明性文檔的編寫)包括了函數(shù)的描述、實例程序、參數(shù)說明、高級注意事項4個部分。我們一般不進行填寫。

d6518fd6-a29b-11eb-aece-12bb97331649.png

點擊上圖中的參數(shù)文檔: 參數(shù)文檔包含了這個函數(shù)的詳細的參數(shù)意義說明:如下圖:

d67c55b8-a29b-11eb-aece-12bb97331649.png

我們?nèi)绻麑⒁话阄臋n和參數(shù)文檔都填完整那么會出現(xiàn)什么情況呢? 你的函數(shù)有了一份像halcon算子一樣的說明文檔: 即選中一個算子,點擊F1出現(xiàn)的算子幫助文檔!

d6a29052-a29b-11eb-aece-12bb97331649.png

d6c0a326-a29b-11eb-aece-12bb97331649.png

完成上述所有步驟點擊確定按鈕即可生成函數(shù)

d729d8a0-a29b-11eb-aece-12bb97331649.png

d75d7f84-a29b-11eb-aece-12bb97331649.png

③運行驗證與函數(shù)更改操作

點擊F5運行程序或者點擊F6單步運行程序驗證程序的準確性。 當F6單步調(diào)試到函數(shù)時可以點擊F7運行到函數(shù)內(nèi)部執(zhí)行。點擊F8跳出函數(shù)執(zhí)行

如果想查看函數(shù)代碼,選中函數(shù),點擊鼠標右鍵,選擇顯示函數(shù)即可查看代碼:

d78c5a0c-a29b-11eb-aece-12bb97331649.png

可以點擊紅色方框內(nèi)的后退按鈕退出當前函數(shù)顯示 如下圖: 點擊藍色方框內(nèi)的 按鈕,打開函數(shù)編輯窗口(即上邊我們進行函數(shù)名修改、接口參數(shù)變化的窗口)

d7a92b14-a29b-11eb-aece-12bb97331649.png

原文鏈接:https://blog.csdn.net/cashmood/article/details/105195235

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 封裝
    +關(guān)注

    關(guān)注

    126

    文章

    7738

    瀏覽量

    142625
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4286

    瀏覽量

    62337
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4728

    瀏覽量

    68251

原文標題:詳解Halcon自定義函數(shù)封裝方法(全網(wǎng)最詳細)

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    創(chuàng)建自定義的基于閃存的引導加載程序(BSL)

    電子發(fā)燒友網(wǎng)站提供《創(chuàng)建自定義的基于閃存的引導加載程序(BSL).pdf》資料免費下載
    發(fā)表于 09-19 10:50 ?0次下載
    創(chuàng)建<b class='flag-5'>自定義</b>的基于閃存的引導加載程序(BSL)

    用TINA V9進行電路仿真,自定義函數(shù)按鈕是灰色的,無法輸入是哪里的問題?

    最近用TINA V9進行電路仿真,激勵想使用自定義函數(shù),但是發(fā)現(xiàn)自定義函數(shù)按鈕是灰色的,無法輸入,是什么地方設(shè)置不對嗎?
    發(fā)表于 08-21 08:17

    NVIDIA NeMo加速并簡化自定義模型開發(fā)

    如果企業(yè)希望充分發(fā)揮出 AI 的力量,就需要根據(jù)其行業(yè)需求量身定制的自定義模型。
    的頭像 發(fā)表于 07-26 11:17 ?663次閱讀
    NVIDIA NeMo加速并簡化<b class='flag-5'>自定義</b>模型開發(fā)

    Labview實現(xiàn)自定義四維云圖(三維曲面圖像)可視化顯示

    函數(shù)基礎(chǔ)上,對其中的數(shù)據(jù)與程序進行修改,實現(xiàn)了曲面云圖顏色效果的自定義配置,提升了Labview的可視化應(yīng)用性。本文以Labview自帶的“繪圖幫助(向量)”vi作為對象,詳細說明具體配置方法
    發(fā)表于 07-16 10:52 ?52次下載

    如何在IDF框架中使用自定義的靜態(tài)庫和動態(tài)庫?

    基于商業(yè)需要,我們需要在 ESP-IDF v4.0-rc 這個版本的IDF中開發(fā)與使用自定義庫,有如下問題請協(xié)助: 1如何利用IDF框架編寫自定義靜態(tài)庫和動態(tài)庫? 2如何在IDF框架中使用自定義的靜態(tài)庫和動態(tài)庫? 有
    發(fā)表于 06-25 07:57

    ESP32如何使用庫中的HF相關(guān)函數(shù)發(fā)送自定義AT指令?

    請問如何使用庫中的HF相關(guān)函數(shù)發(fā)送自定義AT指令?
    發(fā)表于 06-17 07:43

    HarmonyOS開發(fā)案例:【 自定義彈窗】

    基于ArkTS的聲明式開發(fā)范式實現(xiàn)了三種不同的彈窗,第一種直接使用公共組件,后兩種使用CustomDialogController實現(xiàn)自定義彈窗
    的頭像 發(fā)表于 05-16 18:18 ?1252次閱讀
    HarmonyOS開發(fā)案例:【 <b class='flag-5'>自定義</b>彈窗】

    TSMaster 自定義 LIN 調(diào)度表編程指導

    LIN(LocalInterconnectNetwork)協(xié)議調(diào)度表是用于LIN總線通信中的消息調(diào)度的一種機制,我們收到越來越多來自不同用戶希望能夠通過接口實現(xiàn)自定義LIN調(diào)度表的需求。所以在
    的頭像 發(fā)表于 05-11 08:21 ?578次閱讀
    TSMaster <b class='flag-5'>自定義</b> LIN 調(diào)度表編程指導

    HarmonyOS實戰(zhàn)開發(fā)-深度探索與打造個性化自定義組件

    的時候,執(zhí)行build方法渲染系統(tǒng)組件,如果子組件為自定義組件,則創(chuàng)建自定義組件的實例。在執(zhí)行build()函數(shù)的過程中,框架會觀察每個狀態(tài)變量的讀取狀態(tài),將保存兩個map: 狀態(tài)變量
    發(fā)表于 05-08 16:30

    HarmonyOS開發(fā)實例:【自定義Emitter】

    使用[Emitter]實現(xiàn)事件的訂閱和發(fā)布,使用[自定義彈窗]設(shè)置廣告信息。
    的頭像 發(fā)表于 04-14 11:37 ?957次閱讀
    HarmonyOS開發(fā)實例:【<b class='flag-5'>自定義</b>Emitter】

    鴻蒙ArkUI實例:【自定義組件】

    組件是 OpenHarmony 頁面最小顯示單元,一個頁面可由多個組件組合而成,也可只由一個組件組合而成,這些組件可以是ArkUI開發(fā)框架自帶系統(tǒng)組件,比如?`Text`?、?`Button`?等,也可以是自定義組件,本節(jié)筆者簡單介紹一下自定義組件的語法規(guī)范。
    的頭像 發(fā)表于 04-08 10:17 ?583次閱讀

    基于YOLOv8實現(xiàn)自定義姿態(tài)評估模型訓練

    Hello大家好,今天給大家分享一下如何基于YOLOv8姿態(tài)評估模型,實現(xiàn)在自定義數(shù)據(jù)集上,完成自定義姿態(tài)評估模型的訓練與推理。
    的頭像 發(fā)表于 12-25 11:29 ?2750次閱讀
    基于YOLOv8實現(xiàn)<b class='flag-5'>自定義</b>姿態(tài)評估模型訓練

    博途用戶自定義庫的使用

    博途官方提供了很多庫,比如:基本函數(shù)庫、通信庫、安全庫、驅(qū)動庫等等,用戶可以使用庫中的函數(shù)/函數(shù)塊來完成具體的控制任務(wù)。除了官方的庫,我們也可以創(chuàng)建自己的庫(用戶自定義庫)。比如,把項
    的頭像 發(fā)表于 12-25 10:08 ?862次閱讀
    博途用戶<b class='flag-5'>自定義</b>庫的使用

    IAR下手動拷貝自定義程序段到RAM中執(zhí)行的方法分享

    在痞子衡舊文 《IAR下RT-Thread工程自定義函數(shù)段重定向失效分析》 里,我們知道 IAR 鏈接器處理自定義程序段重定向是有一些限制的,只要用戶重寫了底層 __low_level_init()
    的頭像 發(fā)表于 11-21 09:38 ?1837次閱讀
    IAR下手動拷貝<b class='flag-5'>自定義</b>程序段到RAM中執(zhí)行的<b class='flag-5'>方法</b>分享

    如何在Matlab中自定義Message

    自定義Message 當我們的 message 消息比較復雜時,通常要用到自定義的 message 消息,MATLAB 2020b以上的版本自帶了ROS Toolbox Interface
    的頭像 發(fā)表于 11-15 18:12 ?1202次閱讀
    如何在Matlab中<b class='flag-5'>自定義</b>Message