Halcon数据类型转换系列(1)图像image、区域region和轮廓xld的相互转换(★firecat推荐★)

简介: Halcon数据类型转换系列(1)图像image、区域region和轮廓xld的相互转换(★firecat推荐★)

本篇记录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')


或者


threshold (Image1, Region, 128, 255)

region_to_bin(Region, Binary, 0, 255, Width, Height)

write_image (Binary, 'bmp', 0, 'E:/Org.bmp')

或者

binary_threshold (Image1, BrightRegion, 'max_separability', 'dark', UsedThreshold)

region_to_bin(BrightRegion, SaveBinary, 0, 255, Width, Height)

write_image (SaveBinary, 'jpeg 100', 0, 'd:/Org.jpg')


方法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')
read_image (Image2, 'D:/1.jpg')
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image2, Rectangle, ImageReduced)
threshold (ImageReduced, Region, 100, 255)
area_center (Region, Area3, Row3, Column3)
for I := 0 to |Row3| - 1 by 1
    gen_cross_contour_xld (Cross, Row3[I], Column3[I], 20, 0)  
endfor
stop()


六、综合


*动态二值化

D:=31
mean_image(Image1, Mean, D*2+1, D*2+1)
dyn_threshold(Image1, Mean, Seg, 5,'dark')
R:=2.5
erosion_circle (Seg, RegionErosion, R)
dilation_circle (RegionErosion, RegionDilation, R)
fill_up (RegionDilation, RegionFillUp)
connection(RegionFillUp, Regions)
select_shape (Regions, SelectedRegions, 'area', 'and', 100, 30000)
region_to_bin(SelectedRegions, Binary, 0, 255, Width, Height)
area_center (SelectedRegions, Area, Row, Column)
for I := 0 to |Row| - 1 by 1
    gen_cross_contour_xld (Cross, Row[I], Column[I], 20, 0)  
endfor
stop()


相关文章
|
算法 数据可视化
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
2147 0
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
|
1月前
|
Serverless 计算机视觉
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
这篇文章介绍了如何使用OpenCV库通过mask图像绘制分割对象的外接椭圆。首先,需要加载mask图像,然后使用`cv2.findContours()`寻找轮廓,接着用`cv2.fitEllipse()`拟合外接椭圆,最后用`cv2.ellipse()`绘制椭圆。文章提供了详细的代码示例,展示了从读取图像到显示结果的完整过程。
54 0
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
|
5月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
92 0
|
6月前
|
存储 计算机视觉 C++
OpenCV(十四):ROI区域截取
OpenCV(十四):ROI区域截取
341 0
ENVI Classic:如何进行图像融合(HSV变换/Brovey变换/PC变换)?
ENVI Classic:如何进行图像融合(HSV变换/Brovey变换/PC变换)?
1622 0
|
6月前
|
计算机视觉
OpenCV(三十三):计算轮廓面积与轮廓长度
OpenCV(三十三):计算轮廓面积与轮廓长度
260 0
ENVI Classic:如何加载栅格数据(Img/DEM)和矢量数据(evf of ROI)?
ENVI Classic:如何加载栅格数据(Img/DEM)和矢量数据(evf of ROI)?
788 0
|
C++ Python
pcl/pcd/liblas点云强度intensity反射图像过滤显示
pcl/pcd/liblas点云强度intensity反射图像过滤显示
370 0
pcl/pcd/liblas点云强度intensity反射图像过滤显示
|
Ubuntu 机器人 定位技术
ros_gazebo/turtlebot3 室内仿真导航,提取camera/image和pose位姿真值,并将topic 时间同步对齐,最后制作成kitti 格式的数据集。
ros_gazebo/turtlebot3 室内仿真导航,提取camera/image和pose位姿真值,并将topic 时间同步对齐,最后制作成kitti 格式的数据集。
476 0
|
文字识别 监控 算法
Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行彩色图像显示(Color)(C#)(将图像数据Buffer转为HObject)
Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行彩色图像显示(Color)(C#)(将图像数据Buffer转为HObject)
157 0