halcon 圖像 區域 輪廓xld

https://blog.csdn.net/libaineu2004/article/details/102828588

本篇記錄halcon圖像image、區域region和輪廓xld的相互轉換

一、xld轉region
方法1:

gen_region_contour_xld (SelectedXLD, RegionXLD, 'filled')

方法2:

*UnionContours1爲輪廓
sort_contours_xld (UnionContours1, SortedContours, 'upper_left', 'true', 'column')
count_obj (UnionContours1, Number)
*將輪廓轉換成區域   
gen_empty_obj (Line)
for i := 1 to Number by 1
select_obj (SortedContours, ObjectSelected, i)
get_contour_xld (ObjectSelected, Row, Col)   
gen_region_polygon (Region, Row, Col)
concat_obj (Line, Region, Line)
endfor
 

二、region轉xld
方法1:gen_contour_region_xld (SelectedRegions, Contours, 'border')
擬合部分邊緣提取和輪廓分割之間會用到,因爲輪廓分割需輸入xld輪廓,而用boundary提取區域邊緣輸出的是區域(region),所以需要轉換。

方法2:先將區域轉換骨架,然後再提取骨架輪廓

skeleton (Region2, Skeleton2)
gen_contours_skeleton_xld (Skeleton2, Contours, 1, 'filter')

 

三、xld/region轉換成image
方法1:

*Halcon感興趣區域填充特定顏色
color24 := [255,0,0]
color8 := 255
gen_region_contour_xld (UnionContoursCircles, Region1, 'filled')
region_to_bin(Region, Binary, 0, 255, Width, Height)
overpaint_region (Binary, Region1, color8, 'fill')
write_image (Binary, 'bmp', 0, 'E:/Org.bmp')

方法2:

*創建空白圖像,將得到的區域貼到上面
get_image_size (ImageReduced, Width1, Height1)
gen_image_proto (ImageReduced, ImageCleared, 128)
paint_region (Region, ImageCleared, ImageResult1, 255, 'fill')

方法3:(推薦)xld->region->image

*無效set_system ('init_new_image', 'false')
gen_region_contour_xld (ObjectSelected, Region, 'filled')
gen_image_const (NewImage, 'byte', Width, Height)
*Create an image with a specified constant gray value
gen_image_proto (NewImage, ImageCleared1, 255)
*Paint regions into an image
paint_region (Region, ImageCleared1, ImageResult, 0, 'fill')

write_image (ImageResult, 'jpeg', 0, 'D:/1111.jpg')

*Overpaint regions in an image
gen_image_proto (NewImage, ImageCleared2, 255)
overpaint_region(ImageCleared2, Region, 0, 'fill')

結論:paint_region 和overpaint_region最終的輸出結果是一樣的

 

四、從image裁剪需要的區域,成爲新的image
read_image(Image,'monkey')

gen_rectangle1 (ROI_0, 588.03, 468.95, 2328.43, 3212.37)
reduce_domain (Image, ROI_0, ImageReduced)

crop_domain(ImageReduced, ImagePart)

write_image(ImagePart, 'bmp', 0, 'e:/1.bmp')

 

五、從image獲得region
binary_threshold (Image, Region, 'smooth_histo', 'dark', UsedThreshold)

mean_image (Image, ImageMean, 12, 12)
dyn_threshold (Image, ImageMean, Region, 30, 'dark')
https://blog.csdn.net/libaineu2004/article/details/102828588

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章