在halcon中,region和xld之間可以彼此轉換。但這種轉換並不是「無損」的,xld可以是不閉合的,但是region一定是閉合的
。因此,如果將不閉合的xld轉為region,然後再轉回xld,那麼轉換後的xld和原先的xld就有了一定的區別。
言歸正傳,先說說region的縮放。
一、region的縮放
region的縮放很簡單,有zoom_region運算元,其簽名如下,其中scalewidth, scaleheight是寬、高的縮放比例因子:
zoom_region(region : regionzoom : scalewidth, scaleheight : )
縮放的時候,row和column都根據縮放比例因子來放大或縮小。因此縮放後,region的位置會移位,如果不想讓縮放後的region移位,可以這樣:
set_system ('clip_region', 'false'需要注意的是,region縮放後,經常會有一部分跑到畫布外面,halcon預設是將畫布外部的region進行裁切的,如果不想裁切,可以在程式開始加上set_system ('clip_region', 'false'),即不裁切畫布外面的部分。)zoom_region (region, regionzoom,
0.5, 0.5
)area_center (region, area, row, column)
area_center (regionzoom, area1, row1, column1)
move_region (regionzoom, regionmoved, row - row1, column - column1)
二、xld的縮放
本文開頭分析過,「xld——region——xld」的轉換不是無損的,但是如果不介意這一點(或者說影響不大),xld的縮放就可以通過region的縮放為中介。
1、使用region為中介縮放xld
1 gen_image_const (image, 'byte
', 8200, 4200
)2 set_system ('
clip_region
', '
false')
3 read_contour_xld_dxf (contours,'
01.dxf
', , , dxfstatus)
4 *轉為region
5gen_region_contour_xld (contours, region, 'margin')
6 *縮放region
7zoom_region (region, regionzoom, 0.2, 0.2)
8 *轉回xld
如果是下面這樣的xld呢?
用上面的方法的話,發現結果完全不對,如下圖:
那麼應該怎麼弄呢?
2、通過縮放xld中每個點的座標值來縮放xld
1 gen_image_const (image, '其中:byte
', 8200, 4200
)2 set_system ('
clip_region
', '
false')
3 read_contour_xld_dxf (contours,'
02.dxf
', , , dxfstatus)
4count_obj (contours, num)56
*xld上點的取樣間隔(為了縮短處理時間)
7step := 10
8*縮放比例
9scale := 0.3
10gen_empty_obj (contour2)
11for i := 1 to num by 1
12select_obj (contours, contour, i)
13get_contour_xld (contour, row, col)
14 row1 :=
15 col1 :=
16for j := 0 to |row|-1
by step
1718
row1:=[row1,row[j] * scale]
19col1:=[col1,col[j] * scale]
2021
endfor
2223
*判斷輪廓是不是閉合,如果是閉合的,那麼使最後乙個點與第乙個點重合(即讓縮放後的xld也閉合)
24test_closed_xld (contour, isclosed)
25if (isclosed == 1)
26row1:=[row1,row[0] * scale]
27col1:=[col1,col[0] * scale]
28endif
2930
gen_contour_polygon_xld (contour1, row1, col1)
31 smooth_contours_xld (contour1, smoothedcontours, 5)32
concat_obj (contour2, smoothedcontours, contour2)
33 endfor
get_contour_xld (contour, row, col)是得到xld中的一系列點;
gen_contour_polygon_xld (contour1, row1, col1)是通過一系列點重建xld。
結果如下:
halcon獲得線段 region 的端點
在halcon演算法中我們可能會需要求得線段也就是line的端點,那麼怎樣才可以得到呢?主要用到下邊的 skeleton regionlines,skeleton junctions skeleton regionlines,endpoints,juncpoints get region point...
C 中 region和 if的作用
region 提示資訊 endregion 作用 摺疊並隱藏 別且摺疊以後能夠顯示白字 提示資訊 如下圖就是使用了 region和 endregion if else endif 作用 控制編譯的 例如 if condition a else b endif 如果condition為真,則程式編譯的...
halcon中面到面的距離 Halcon標定步驟
halcon標定步驟 1.設定相機內部引數的初始值 startcampar 0.016,0,0.0000074,0.0000074,326,247,652,494 set calib data cam param calibdataid,0,area scan division startcampa...