halcon算子詳解——disp_message
技術標簽: HALCON
算子:disp_message( : : WindowHandle, String, CoordSystem, Row, Column, Color, Box : )
功能:此過程將編寫一條文本消息。
此過程在圖形窗口“窗口句柄”中的位置(Row,Column)顯示文本。
如果僅定義一個位置,則為String的每個元素顯示一個文本行。 “ \ n”將被解釋為換行符。
文本的位置可以在窗口坐標(坐標系=“窗口”)或圖像坐標(坐標系=“圖像”)中指定,這在使用縮放圖像時非常有用。除了提供(行,列)坐標外,還可以將預定義值傳遞給行和列,以在窗口中的固定位置顯示文本(僅當CoordSystem ='window'時)。
參數Color也接受值的數組。在這種情況下,對於每個新的文本位置或每個新的文本行,如果使用單個位置,則循環使用指定的顏色。
Box參數,如果設置為“ true”,則文本將寫在橙色框中,如果設置為“ false”,則不會顯示任何框。Box的可選第二個值控制是否顯示陰影。
輸入參數: WindowHandle圖形窗口的窗口句柄,顯示消息的位置。
String包含要顯示的文本消息的字符串數組。數組的每個值將顯示在一行中。
CoordSystem如果設置為“窗口”,則相對於窗口坐標系給出文本位置。 如果設置為“圖像”,則使用圖像坐標(這在縮放圖像中可能很有用)。默認值'window',有'window'和'image'兩個選項。
Row所需文本位置的垂直文本對齊方式或行坐標。 -1映射到12。默認值12.建議值:10, 12, 20, 30, 'bottom', 'center', 'top'。
Column所需文本位置的水平文本對齊方式或列坐標。 -1映射到12。默認值12.建議值:10, 12, 20, 30, 'center', 'left', 'right'。
Color將文本的顏色定義為字符串。 如果設置為[]或'',則使用當前設置的顏色。 如果傳遞了字符串元組,則顏色將循環用於每個新位置或文本行。默認值black。
Box如果設置為“ true”,則文本將寫在橙色框中。 如果設置為“ false”,則不會顯示任何框。 如果設置為顏色字符串(例如'white','#FF00CC'等),則文本將以該顏色的框書寫。 可選地,第二個值控制盒子陰影的外觀。默認值true。可選項'true', 'false', 'white', 'red', 'forest green', 'black', 'blue'。
例程:
*打開窗體得到窗體句柄
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*設置 字體
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
* [ ]中括號是數組
disp_message (WindowHandle, ['Hello','world!'], 'window', 12, 12, ['black','blue'], 'true')
disp_message (WindowHandle, ['Hello','world!'], 'window', 12, 120, 'white', ['blue','false'])
*定義變量 [ ]中括號是數組
Angle := [0,90,180,270]
Row := 200 - sin(rad(Angle))*100 *行坐標 行中心坐標減上移坐標 上移坐標靠sin正弦函數算出 下面同理
Column := 250 + cos(rad(Angle))*100
Color := ['green','red','red','red']
*參數1: WindowHandle要寫出窗體的句柄,參數2:要寫的字符串 例如:Angle+' deg'指顯示已經在前面定義的變量角度加字符串deg
*參數3:坐標系 可選擇圖像或窗體 這里選擇的是窗體 參數4:橫縱坐標 這里多個坐標循環寫入
*參數5:顏色默認為黑色 這里用color數組來表示多個顏色 參數6:box文本框 如果不顯示則是 false 如果顯示true 默認是橘色也可以直接寫顏色例如例如'white','#FF00CC'等
注意這里的參數2是角度是數組多個值,參數3、4 坐標是循環寫入時調用多次,參數5顏色也是數組
disp_message (WindowHandle, Angle+' deg', 'window', Row, Column, Color, 'false')
*畫輪廓 參數1:Cross 十字,參數2、3:行列坐標,參數4:size 生成圖像大小,參數5:angle 生成圖像的角度
gen_cross_contour_xld (Cross, 200, 250, 200, 0)

模板匹配案例詳解
dev_update_window ('off')
* image acquisition and window size
*抓圖 虛擬采圖接口
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'default', 'board/board.seq', 'default', -1, 1, FGHandle)
*從指定的圖像采集設備同步抓取圖像FGHandle采圖設備句柄
grab_image (ModelImage, FGHandle)
*防問通道的指針 get_image_pointer1(圖片;::指針,類型,寬度,高度)
get_image_pointer1 (ModelImage, Pointer, Type, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
*顯示部分比窗體高寬小1
dev_set_part (0, 0, Height - 1, Width - 1)
*顯示圖片
dev_display (ModelImage)
* colors and other settings for the visualization
*顯示設置顏色是黃色
dev_set_color ('yellow')
*顯示設置畫輪廓
dev_set_draw ('margin')
*顯示設置線條寬度為2
dev_set_line_width (2)
*設置顯示字體
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
*繼續顯示消息
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* ------------------- start of the application ----------------
* step 1: select the model object
Row1 := 188
Column1 := 182
Row2 := 298
Column2 := 412
*創建一個與坐標軸平行的矩形
gen_rectangle1 (ROI, Row1, Column1, Row2, Column2)
dev_display (ROI)
*縮減區域,縮放原區域至新的范圍,新范圍必須是原范圍的子域。從ModelImage照ROI縮小得到新區域ImageROI
reduce_domain (ModelImage, ROI, ImageROI)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* step 2: create the model
*inspect檢查圖形模板 參數1:輸入圖像 參數2:輸出圖像 金字塔 參數3:輸入模板金字塔
*參數4:金字塔層數 *參數5:對比度
inspect_shape_model (ImageROI, ShapeModelImages, ShapeModelRegions, 8, 30)
dev_clear_window ()
dev_set_color ('blue')
dev_display (ShapeModelRegions)
*用來得到面積中心 參數1:輸入目標區域 參數2:輸出目標區域的面積AreaModelRegions 參數3、4:輸出目標區域中心的行列坐標
*注意得到的可能是數組
area_center (ShapeModelRegions, AreaModelRegions, RowModelRegions, ColumnModelRegions)
*計算圖像中有多少個元素
count_obj (ShapeModelRegions, HeightPyramid)
*通過循環得出面積大於15的金字塔等級數 來優化金字塔等級 等級越高准確率越高但速度越慢
for i := 1 to HeightPyramid by 1
if (AreaModelRegions[i - 1] >= 15)
NumLevels := i
endif
endfor
*創造生成圖形模板 參數1;輸入圖像 參數2:最大金字塔等級 參數3、4:圖像旋轉角度范圍
*參數5:旋轉角度分辨率這里是auto自動設置 參數6:優化模型的方法
create_shape_model (ImageROI, NumLevels, 0, rad(360), 'auto', 'none', 'use_polarity', 30, 10, ModelID)
*獲取模板圖形的輪廓 參數1:模板圖形 參數2:模板句柄 參數3:圖形金字塔層級
get_shape_model_contours (ShapeModel, ModelID, 1)
*顯示連續信息因為下一句是停止 用來提示可以繼續
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* step 3: find the object in other images
for i := 1 to 20 by 1
*從采圖設備獲取圖片
grab_image (SearchImage, FGHandle)
*在圖像中查找形狀最佳匹配項 參數1:SearchImage輸入圖像 參數2:模板句柄 參數3、4:旋轉范圍
*參數5:要找模型實例的最低分 參數6:要找圖像的個數1 參數7:重疊度 8:最小增量 9:
find_shape_model (SearchImage, ModelID, 0, rad(360), 0.7, 1, 0.5, 'least_squares', 0, 0.7, RowCheck, ColumnCheck, AngleCheck, Score)
*得分絕對值四舍五入=1
if (|Score| == 1)
dev_set_color ('yellow')
*仿射變換 參數1、2:原點行列坐標,3:旋轉角度Angle 4、5、6:變換點的行列坐標角度 7:輸出變換矩陣
vector_angle_to_rigid (0, 0, 0, RowCheck, ColumnCheck, AngleCheck, MovementOfObject)
*輪廓防射變換 參數1:輸入輪廓 2:輸出變換后 輪廓 3:輸入變換矩陣
affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MovementOfObject)
dev_display (SearchImage)
dev_display (ModelAtNewPosition)
endif
if (i != 20)
disp_continue_message (WindowHandle, 'black', 'true')
endif
stop ()
endfor
* ------------------- end of the application -----------------
* clean up
*清除模板
clear_shape_model (ModelID)
dev_update_window ('on')
*關閉圖像采集器
close_framegrabber (FGHandle)
