HALCON示例程序inner_rectangle1.hdev木板有效區域提取
示例程序源碼(加注釋)
- 關于顯示類函數解釋
dev_update_window (‘off’)
dev_update_var (‘off’)
dev_update_pc (‘off’)
read_image (Image, ‘wood_knots’)
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle) - 定義區域篩選變量并且初始化
MinAreaSize := 10000
MinWidth := 50
MinHeight := 50
dev_display (Image) - 動態閾值分割圖像.
mean_image (Image, ThresholdImage, 31, 31)
dyn_threshold (Image, ThresholdImage, RegionDynThresh, 20, ‘dark’) - 使用圓形元素對區域進行腐蝕
erosion_circle (RegionDynThresh, RegionErosion, 1.5) - 分割連通域
connection (RegionErosion, ConnectedRegions) - 使用面積篩選區域
select_shape (ConnectedRegions, KnobRegions, ‘area’, ‘and’, 20, 200) - 使用圓形元素對區域進行膨脹
dilation_circle (KnobRegions, KnobRegionsDilated, 5.5) - 合并區域
union1 (KnobRegionsDilated, KnobRegionsUnion) - get_domain - 獲取圖像的域。
get_domain (Image, Domain) - 求取兩區域不相交的區域
difference (Domain, KnobRegionsUnion, KnobFreeRegion) - 求取區域面積
area_center (KnobFreeRegion, Area, Row, Column) - 生成一個空對象
gen_empty_obj (KnobFreeRectangles)
while (Area > MinAreaSize)- 確定適合區域的最大軸平行矩形
inner_rectangle1 (KnobFreeRegion, Row1, Column1, Row2, Column2)
RectangleHeight := Row2 - Row1
RectangleWidth := Column2 - Column1 - 這是程序精華部分,使用一個difference完成 剩下區域最大矩形的提取。
if (RectangleHeight > MinHeight and RectangleWidth > MinWidth)- 畫矩形框
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2) - 合并區域但不改變區域對象個數
concat_obj (KnobFreeRectangles, Rectangle, KnobFreeRectangles) - 求取兩個區域不相交的區域
difference (KnobFreeRegion, Rectangle, KnobFreeRegion) - 求取區域面積
area_center (KnobFreeRegion, Area, Row, Column)
- 畫矩形框
- 否則跳出
else
break
endif
- 確定適合區域的最大軸平行矩形
endwhile
dev_set_draw (‘margin’)
dev_set_line_width (2)
dev_display (Image)
dev_set_colored (12)
dev_display (KnobFreeRectangles)
處理思路
這個例子是主要講解了inner_rectangle1 算子的應用,求取適合區域的最大平行于坐標軸的內部矩形。
后記
大家有什么問題可以向我提問哈,我看到了第一時間回復,希望在學習的路上多多結交良師益友。