halcon開發必讀

關於HALCON的新手入門問題簡答(1)

    1. 不管讀入什麼圖像,讀入圖像顯示效果明顯和原始圖像不一致,哪怕是從相機讀入的圖像,也是明顯顏色差別。什麼緣由引發?
      答:初步診斷是,顯示的時候調用的顏色查找表存在異常不是 default ,而是其它選項。此時能夠經過查閱相關參數,調用set_system解決,也能夠 在 編輯-》參數選擇-》顏色查找表進行更改 。 windows

    2. 裁剪圖像;從圖像上截取某段圖像進行保存。如何實現該操做 ?
      答:首先應該知道,region不具備單獨構成圖像的要素,他沒有灰度值。有用過opencv的應該知道 ROI(感興趣區域),設置好它後,對圖像的大部分操做就轉爲 圖像的一個矩形區域內進行。相似的,halcon有domain 概念。 首先 設置好一個矩形區,而後使用 reduce_domain(是一個矩形區域)後,再使用crop_domain 就裁剪出圖像。 數組

    3. 讀入bmp,或tiff 圖像 顯示 該圖不是bmp文件或不能讀。緣由是什麼?
      答:這個常有新手詢問,畫圖,圖像管理器都能打開,又或者是相機採集完直接存到硬盤。Halcon 讀取圖像 在windows下面到最後是調用windows庫函數 實現讀圖功能。咱不清楚究竟是怎麼調用的。對於圖像格式,在讀圖函數F1說明很細。基本 bmp 若是 文件頭不是bw仍是bm(百度百科bmp格式查找,編寫此處時無網絡,後續可能忘記),就讀不進來 。其餘規格歡迎補充。解決辦法,若是是相機採集,就在內存直接轉換(參見 halcon到VC.pdf 裏面的 halcon和bitmap互轉);若是是採完的圖片,大部分經過畫圖工具轉換爲 24位bmp格式,便可解決。、 網絡

    4. 讀入avi文件報錯。
      答:Halcon 經過 directshow或另外一個格式解析視頻,正常來講應該能夠讀入市面大部分視頻,實際測試發現只能讀入最標準的avi文件格式。若是須要臨時處理,須要下格式工廠等工具轉化爲最標準的avi文件格式(論壇葉諾有發帖說明)。 多線程

    5. Region 或 xld 篩選 。
      答:Halcon提供了豐富的region 和xld篩選方法。Region可使用select_shape_xld,選擇出符合要求的區域,若是 不能知足還能夠經過 相似 region feature 這樣關鍵字組合成的算子獲取區域特徵,而後經過 tuple 排序或相加減,再經過 tuple_find 肯定是對應哪一個區域的特徵。一樣的halcon也提供了 select_contours_xld 進行輪廓篩選 。 dom

    6. Halcon分幾類對象,每一個類的功用是?
      答:Halcon總分倆大類,tuple和圖標對象obj 。Tuple涵蓋了對 全部基礎數據類型的封裝,能夠理解爲她是halcon定義的數組類。Obj 是alcon定義圖標類基類。衍生出了許多類型,其中 Region ,Xld,Image 其中最主要的類型。 函數

    7. F1說明,參數部分 -array 是什麼意思?
      答:該符號說明,該參數接受一組輸入,對tuple就是一組tuple,對obj 就是經過concat_obj或其它操做產生的一組obj元組。 工具

    8. 倆個相對方形物體的距離計算。
      答:若是這倆個物體和背景對比清晰,最近的距離在倆條邊下則能夠再預處理以後進行以下操做:
      1.Segement_contours_xld 分割邊緣線段(edgeXXXX等獲得的邊緣);
      2.select_contours_xld 選擇出特定的長度或方向邊緣;
      3.假設此時恰好獲取倆條線 ,則能夠利用 distance_ll ,求得 距離,也能夠本身fit_lineXXXX 擬合直線再求距離;
      以上是一種方法,另外一種常見方法是利用 measure_pos  或measure_pair 進行測量,不熟悉的能夠翻看示例或者使用 測量助手進行測量 。 測試

    9. 建立過程或函數,或者全文編輯。
      答:在算子編輯窗口,main所在行右邊,有四個按鈕,將鼠標移到該位置,將有中文提示,按提示點擊按鈕。 ui

    10. 從其它halcon環境窗口複製函數或算子 複製 到新建的halcon窗口,沒法使用,提示不識別。
      答:除了敲錯,此種狀況都是因爲該函數式本地或全局函數,而不是halcon算子。肯定的方法:注意該算子顏色而後去 編輯 參數選擇 查看該顏色表明的算子屬於什麼類型函數。亦能夠直接右鍵,若是有查看函數。爲黑色可點擊,這種狀況也是本地或全局函數。
      解決方法:若是是全局函數,能夠在halcon目錄下面找到該函數,加載到新窗口就行;也能夠新建輸入輸出一致的過程,將代碼複製過來,而後使用。本地函數只能使用後一種方法解決。 編碼

    11. 64位系統,VS2010及如下版本 報 error LNK1112:模塊計算機類型」X86」 與目標計算機類型」X64」 衝突 。
      答:問題緣由是默認狀況,halcon在64位系統會自動安裝64位halcondll,而且添加到環境變量;而vs通常是默認X86編譯環境,倆者dll庫不一致,換句話說是底層機器指令不一致。解決辦法是 將編譯環境設置爲64位,詳見百度 ;或者再次安裝halcon選擇32位dll,並修改環境變量 VC++路徑爲32位庫路徑,bin 指向32位dll 路徑。

    12. 64位系統,VS2012 。不管怎麼更改庫文件,頭文件,名空間,最好的提示也是找不到函數定義。
      答:反覆出現,沒法解決時,有多是 問題11所述問題,解決辦法見11.至於爲什麼不提示error LNK1112,多是VS更改了前面檢測等級,在編譯階段就攔截到錯誤。應該說是更先進了,只是比較不合情理。

    13. 如何查找halcon算子?
      答:Halcon算子命名大部分所見即所得,也就是若是你記得你要找的算子漢字名稱,輸入到翻譯器獲得英文單詞,在F1 的算子分欄 從頭開始輸大部分能找到一些算子,這時候再點擊進去注意算子功能解釋,懂了是本身要的就拿起來到例程搜索示例,查閱功能;不懂就看說明部分;再不懂進羣問。
      另外 ,對於近半算子是 按 動做_類型/目標_屬性 命名。 Obj 是 region,xld,image的父類,後三者找不到的算子能夠輸入 obj查找 。

    14. Halcon 相等,不等於,異或,或等操做符。
      答:直接在F1 出來的分欄 輸入 operation ,查找可得。

    15. 在halcon環境 使用 get_grayval 進行像素操做太慢 ,如何加速?
      答:注意到halcon環境是解釋執行,get_grayval 能夠一次獲取多個,能夠預先把行數據存入一個tuple對象,存一次之後可用屢次。所以提速方法,建議事先建立好行tuple (用tuple_add 加一,便可實現全部行加一),列的tuple 數組 (建立好能夠用屢次) 。這時每次再調用get_grayval ,速度將顯著提高,由於節省了逐行解釋時間 。注意:若是導出到VC,則建議用get_image_pointer 獲取指針進行操做 。

    16. 從一組region或xld,image中獲取單個對象,或多個halcon同類對象構成
      -array 元組。
      答:select_obj負責從 多個對象的元組選出指定序號對象;concat_obj執行將倆個對象(或元組)連接成一個對象元組。

    17. 更改halcon顏色查找表,顯示不一樣顏色空間 。
      答:在編輯 參數選擇 顏色查找表進行更改;也能夠在F1輸入lut進行查找設置函數。

    18. 建立空對象 ,空Region ,空數組。
      答:gen_empty_obj 建立空的對象;gen_emtpy_region 建立空數組;halcon環境中tuple 用 :=[] 。

    19. Region和xld 互相轉化 ;多邊形建立xld;直方圖,直線,點集,多邊形,行程編碼建立region 。
      答:Halcon裏對象之間的相互轉換,通常能夠轉化爲gen_目標對象_源對象 形式 。如:gen_region_contour_xld  使用xld建立一個region ;gen_contour_region_xld 從區域region建立一個輪廓xld 。直方圖histo;直線是line,點集是points,行程編碼runs,黑森線hline,多邊形polygon 。按照上面格式進行查找 。

    20. Halcon僞彩色
      答:能夠參照岡薩雷斯僞彩色 章節 。

    21. Halcon角度分佈

    22. 判斷Region 是否爲空 ?
      答:首先通常region是多個region存在一個regions 變量裏面 。因此 先使用count_obj 得到有多少個 obj;而後使用 select_obj ,選出一個區域處理;接着使用 area_center ,VC可使用 region.Id()!=H_EMPTY_REGION 判斷是否爲空 。

    23. 用halcon調用halcon支持的品牌相機,使用相機自帶的廠家軟件 能夠發現相機,但是halcon老是提示:圖像獲取設備未初始化。這是爲何?
      答:把對應品牌的相機配置文件加到採集助手的,使當前halcon調用的相機參數與廠家軟件一致;再確保 相機驅動,採集卡驅動安裝完畢。

    24. 屏幕/窗口截圖 。
      答:使用dump_window_image 保存對應窗口截圖,截圖爲當前肉眼所見圖像,包括已經繪製到圖像上的region,xld等。

    25. 導出halcon 11 代碼爲C++ 代碼,常常提示不識別 ,或者 名空間名字沒找到 。解決辦法 是什麼?
      答:首先 halcon11 導出若是沒有勾選10 ,默認產生的C++代碼,對應的主要頭文件是 HalconCPP.h 和 using namespace HalconCPP 。
      配置以下 頭文件 #include 「HalconCPP.h」 ,代碼在導出時已經自動生成 。
      using namespace HalconCPP;   代碼導出時已經自動生成 。
      在VC++目錄 ,配置include路徑 ,一個是 默認Halcon安裝文件夾下面的include ,另一個根據你導出的代碼而定,上面是 halconCPP ,因此對應添加 include文件夾下面的 HalconCPP文件夾到路徑裏面 。
      此外配置  將安裝文件夾下的lib添加到 庫文件 目錄 。
      最後將 HalconCPP.lib添加到 庫的 依賴項。注意此處要一句導出代碼而定,上述導出的是halcon -C++代碼 ,因此是 此處添加該項。

    26. 標定助手的 「平均偏差」是指什麼 ?
      答: 這個平均偏差的計算是按以下方式:
      1.計算標定板圖像的 標誌點位置,此處記爲Mark1 ;
      2.標定結束後,將標準標誌點 ,按照得出的轉換矩陣,進行轉換獲得Mark2;
      3.因爲能夠獲得Mark1 和 Mark2 點之間對應關係,點對應相減 ,絕對值累加(此處累加方式請具體查標定程序查找具體平均偏差計算函數,好久,已記憶不詳) ,而後除以 標誌點數目 。
      4.此時獲得的就是平均偏差 。

    27. Halcon參數函數裏面的四個冒號 (::::)是什麼意思?
      答:四個冒號按照參數類型和輸入輸出不一樣進行了分隔 。 從左到右依次是  (輸入的obj對象 : 輸出的obkj對象 : 輸入的控制變量 : 輸出的控制變量 ) 。

    28. Halcon F1 算子 Parameters 格式說明 。
      答:例1:Image1 (input_object)  (multichannel-)image(-array) → object (byte* / int1* / int2* / uint2* / int4* / int8 / real*) *allowed for compute devices
      Input image 1.
      Image1 對應參數名    input_object  指示對象參數類型 是輸入對象
      (multichannel-) 指示是能夠是多通道圖像   image  指示 參數是一個 image類型
      (-array)  指示能夠一次輸入多個    object(……) 指示輸入的是object,其中支持的object參數的內部類型如(……)所示 。
      例2: Mult (input_control)  number → (real / integer)
      參數名(參數類型)    具體類型->(支持內部參數類型)

    29. 多線程調用代碼,代碼中包含halcon窗口代碼 ,報錯。
      答:Halcon涉及到窗口的代碼都不能跨線程調用,硬是跨線程調用可能出現參數輸入錯誤等異常狀況。參見函數 F1 說明 的 Parallelization 並行性 說明 。最好的辦法是 當前窗口當前線程聲明,定義並使用,其它線程能夠對MFC的picturebox 控件進行關聯(不一樣線程調用該代碼穩定性待測試),而後不一樣線程本身定義變量進行具體操做。

    30. region或者xld繪製或畫到圖像上用哪一個函數?
      答:Halcon繪製有paint和overpaint,區別是overpaint是繪製自身,paint輸出能夠是其餘圖像。
      繪製region:paint_region 繪製xld: paint_xld 。

    31. 線觸發,軟觸發,外觸發
      答:軟觸發:顧名思義就是到達設定的採集條件時,經過軟件設置觸發採集;
      線觸發:也稱外觸發,是利用相機自帶觸發線,在到達設定的採集條件時,觸發相機採集,線的信號一般是由其餘設備如:紅外傳感器,探測到目標物體出如今預約位置,就進行採集

    32. 編寫程序過程當中,程序崩潰,環境保存路徑 。(待驗證) 答: 對於windows系統,路徑是 C:\Documents and Settings\login\Local Settings\Temp\hdevelop.  其中login爲登陸的系統用戶名 。 注意1: 在win xp 下測試 ,在調試程序過程當中未發現臨時文本 。因此待驗證 。 注意2:win7要求版本爲11.0.1以後 ,以前版本存在bug 。

相關文章
相關標籤/搜索