不管讀入什麼圖像,讀入圖像顯示效果明顯和原始圖像不一致,哪怕是從相機讀入的圖像,也是明顯顏色差別。什麼緣由引發?
答:初步診斷是,顯示的時候調用的顏色查找表存在異常不是 default ,而是其它選項。此時能夠經過查閱相關參數,調用set_system解決,也能夠 在 編輯-》參數選擇-》顏色查找表進行更改 。 windows
裁剪圖像;從圖像上截取某段圖像進行保存。如何實現該操做 ?
答:首先應該知道,region不具備單獨構成圖像的要素,他沒有灰度值。有用過opencv的應該知道 ROI(感興趣區域),設置好它後,對圖像的大部分操做就轉爲 圖像的一個矩形區域內進行。相似的,halcon有domain 概念。 首先 設置好一個矩形區,而後使用 reduce_domain(是一個矩形區域)後,再使用crop_domain 就裁剪出圖像。 數組
讀入bmp,或tiff 圖像 顯示 該圖不是bmp文件或不能讀。緣由是什麼?
答:這個常有新手詢問,畫圖,圖像管理器都能打開,又或者是相機採集完直接存到硬盤。Halcon 讀取圖像 在windows下面到最後是調用windows庫函數 實現讀圖功能。咱不清楚究竟是怎麼調用的。對於圖像格式,在讀圖函數F1說明很細。基本 bmp 若是 文件頭不是bw仍是bm(百度百科bmp格式查找,編寫此處時無網絡,後續可能忘記),就讀不進來 。其餘規格歡迎補充。解決辦法,若是是相機採集,就在內存直接轉換(參見 halcon到VC.pdf 裏面的 halcon和bitmap互轉);若是是採完的圖片,大部分經過畫圖工具轉換爲 24位bmp格式,便可解決。、 網絡
讀入avi文件報錯。
答:Halcon 經過 directshow或另外一個格式解析視頻,正常來講應該能夠讀入市面大部分視頻,實際測試發現只能讀入最標準的avi文件格式。若是須要臨時處理,須要下格式工廠等工具轉化爲最標準的avi文件格式(論壇葉諾有發帖說明)。 多線程
Region 或 xld 篩選 。
答:Halcon提供了豐富的region 和xld篩選方法。Region可使用select_shape_xld,選擇出符合要求的區域,若是 不能知足還能夠經過 相似 region feature 這樣關鍵字組合成的算子獲取區域特徵,而後經過 tuple 排序或相加減,再經過 tuple_find 肯定是對應哪一個區域的特徵。一樣的halcon也提供了 select_contours_xld 進行輪廓篩選 。 dom
Halcon分幾類對象,每一個類的功用是?
答:Halcon總分倆大類,tuple和圖標對象obj 。Tuple涵蓋了對 全部基礎數據類型的封裝,能夠理解爲她是halcon定義的數組類。Obj 是alcon定義圖標類基類。衍生出了許多類型,其中 Region ,Xld,Image 其中最主要的類型。 函數
F1說明,參數部分 -array 是什麼意思?
答:該符號說明,該參數接受一組輸入,對tuple就是一組tuple,對obj 就是經過concat_obj或其它操做產生的一組obj元組。 工具
倆個相對方形物體的距離計算。
答:若是這倆個物體和背景對比清晰,最近的距離在倆條邊下則能夠再預處理以後進行以下操做:
1.Segement_contours_xld 分割邊緣線段(edgeXXXX等獲得的邊緣);
2.select_contours_xld 選擇出特定的長度或方向邊緣;
3.假設此時恰好獲取倆條線 ,則能夠利用 distance_ll ,求得 距離,也能夠本身fit_lineXXXX 擬合直線再求距離;
以上是一種方法,另外一種常見方法是利用 measure_pos 或measure_pair 進行測量,不熟悉的能夠翻看示例或者使用 測量助手進行測量 。 測試
建立過程或函數,或者全文編輯。
答:在算子編輯窗口,main所在行右邊,有四個按鈕,將鼠標移到該位置,將有中文提示,按提示點擊按鈕。 ui
從其它halcon環境窗口複製函數或算子 複製 到新建的halcon窗口,沒法使用,提示不識別。
答:除了敲錯,此種狀況都是因爲該函數式本地或全局函數,而不是halcon算子。肯定的方法:注意該算子顏色而後去 編輯 參數選擇 查看該顏色表明的算子屬於什麼類型函數。亦能夠直接右鍵,若是有查看函數。爲黑色可點擊,這種狀況也是本地或全局函數。
解決方法:若是是全局函數,能夠在halcon目錄下面找到該函數,加載到新窗口就行;也能夠新建輸入輸出一致的過程,將代碼複製過來,而後使用。本地函數只能使用後一種方法解決。 編碼
64位系統,VS2010及如下版本 報 error LNK1112:模塊計算機類型」X86」 與目標計算機類型」X64」 衝突 。
答:問題緣由是默認狀況,halcon在64位系統會自動安裝64位halcondll,而且添加到環境變量;而vs通常是默認X86編譯環境,倆者dll庫不一致,換句話說是底層機器指令不一致。解決辦法是 將編譯環境設置爲64位,詳見百度 ;或者再次安裝halcon選擇32位dll,並修改環境變量 VC++路徑爲32位庫路徑,bin 指向32位dll 路徑。
64位系統,VS2012 。不管怎麼更改庫文件,頭文件,名空間,最好的提示也是找不到函數定義。
答:反覆出現,沒法解決時,有多是 問題11所述問題,解決辦法見11.至於爲什麼不提示error LNK1112,多是VS更改了前面檢測等級,在編譯階段就攔截到錯誤。應該說是更先進了,只是比較不合情理。
如何查找halcon算子?
答:Halcon算子命名大部分所見即所得,也就是若是你記得你要找的算子漢字名稱,輸入到翻譯器獲得英文單詞,在F1 的算子分欄 從頭開始輸大部分能找到一些算子,這時候再點擊進去注意算子功能解釋,懂了是本身要的就拿起來到例程搜索示例,查閱功能;不懂就看說明部分;再不懂進羣問。
另外 ,對於近半算子是 按 動做_類型/目標_屬性 命名。 Obj 是 region,xld,image的父類,後三者找不到的算子能夠輸入 obj查找 。
Halcon 相等,不等於,異或,或等操做符。
答:直接在F1 出來的分欄 輸入 operation ,查找可得。
在halcon環境 使用 get_grayval 進行像素操做太慢 ,如何加速?
答:注意到halcon環境是解釋執行,get_grayval 能夠一次獲取多個,能夠預先把行數據存入一個tuple對象,存一次之後可用屢次。所以提速方法,建議事先建立好行tuple (用tuple_add 加一,便可實現全部行加一),列的tuple 數組 (建立好能夠用屢次) 。這時每次再調用get_grayval ,速度將顯著提高,由於節省了逐行解釋時間 。注意:若是導出到VC,則建議用get_image_pointer 獲取指針進行操做 。
從一組region或xld,image中獲取單個對象,或多個halcon同類對象構成
-array 元組。
答:select_obj負責從 多個對象的元組選出指定序號對象;concat_obj執行將倆個對象(或元組)連接成一個對象元組。
更改halcon顏色查找表,顯示不一樣顏色空間 。
答:在編輯 參數選擇 顏色查找表進行更改;也能夠在F1輸入lut進行查找設置函數。
建立空對象 ,空Region ,空數組。
答:gen_empty_obj 建立空的對象;gen_emtpy_region 建立空數組;halcon環境中tuple 用 :=[] 。
Region和xld 互相轉化 ;多邊形建立xld;直方圖,直線,點集,多邊形,行程編碼建立region 。
答:Halcon裏對象之間的相互轉換,通常能夠轉化爲gen_目標對象_源對象 形式 。如:gen_region_contour_xld 使用xld建立一個region ;gen_contour_region_xld 從區域region建立一個輪廓xld 。直方圖histo;直線是line,點集是points,行程編碼runs,黑森線hline,多邊形polygon 。按照上面格式進行查找 。
Halcon僞彩色
答:能夠參照岡薩雷斯僞彩色 章節 。
Halcon角度分佈
判斷Region 是否爲空 ?
答:首先通常region是多個region存在一個regions 變量裏面 。因此 先使用count_obj 得到有多少個 obj;而後使用 select_obj ,選出一個區域處理;接着使用 area_center ,VC可使用 region.Id()!=H_EMPTY_REGION 判斷是否爲空 。
用halcon調用halcon支持的品牌相機,使用相機自帶的廠家軟件 能夠發現相機,但是halcon老是提示:圖像獲取設備未初始化。這是爲何?
答:把對應品牌的相機配置文件加到採集助手的,使當前halcon調用的相機參數與廠家軟件一致;再確保 相機驅動,採集卡驅動安裝完畢。
屏幕/窗口截圖 。
答:使用dump_window_image 保存對應窗口截圖,截圖爲當前肉眼所見圖像,包括已經繪製到圖像上的region,xld等。
導出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++代碼 ,因此是 此處添加該項。
標定助手的 「平均偏差」是指什麼 ?
答: 這個平均偏差的計算是按以下方式:
1.計算標定板圖像的 標誌點位置,此處記爲Mark1 ;
2.標定結束後,將標準標誌點 ,按照得出的轉換矩陣,進行轉換獲得Mark2;
3.因爲能夠獲得Mark1 和 Mark2 點之間對應關係,點對應相減 ,絕對值累加(此處累加方式請具體查標定程序查找具體平均偏差計算函數,好久,已記憶不詳) ,而後除以 標誌點數目 。
4.此時獲得的就是平均偏差 。
Halcon參數函數裏面的四個冒號 (::::)是什麼意思?
答:四個冒號按照參數類型和輸入輸出不一樣進行了分隔 。 從左到右依次是 (輸入的obj對象 : 輸出的obkj對象 : 輸入的控制變量 : 輸出的控制變量 ) 。
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)
參數名(參數類型) 具體類型->(支持內部參數類型)
多線程調用代碼,代碼中包含halcon窗口代碼 ,報錯。
答:Halcon涉及到窗口的代碼都不能跨線程調用,硬是跨線程調用可能出現參數輸入錯誤等異常狀況。參見函數 F1 說明 的 Parallelization 並行性 說明 。最好的辦法是 當前窗口當前線程聲明,定義並使用,其它線程能夠對MFC的picturebox 控件進行關聯(不一樣線程調用該代碼穩定性待測試),而後不一樣線程本身定義變量進行具體操做。
region或者xld繪製或畫到圖像上用哪一個函數?
答:Halcon繪製有paint和overpaint,區別是overpaint是繪製自身,paint輸出能夠是其餘圖像。
繪製region:paint_region 繪製xld: paint_xld 。
線觸發,軟觸發,外觸發
答:軟觸發:顧名思義就是到達設定的採集條件時,經過軟件設置觸發採集;
線觸發:也稱外觸發,是利用相機自帶觸發線,在到達設定的採集條件時,觸發相機採集,線的信號一般是由其餘設備如:紅外傳感器,探測到目標物體出如今預約位置,就進行採集
編寫程序過程當中,程序崩潰,環境保存路徑 。(待驗證) 答: 對於windows系統,路徑是 C:\Documents and Settings\login\Local Settings\Temp\hdevelop. 其中login爲登陸的系統用戶名 。 注意1: 在win xp 下測試 ,在調試程序過程當中未發現臨時文本 。因此待驗證 。 注意2:win7要求版本爲11.0.1以後 ,以前版本存在bug 。