halcon-学习笔记

*halcon基础编程
	等号  := 
	不等号 #
	注释号 *
	字符串赋值 str := 'halcon'
	等于比较符 if(X=10)
	与: if(A>1 and A<30)
	或: if(A>1 or A<30)
	求反: if(not(A=10))


* 二值化
threshold (Image, Region, 100, 255)4

* 形状变换
shape_trans (Region, RegionTrans, 'rectangle2')

* 抠图
reduce_domain (Image, RegionTrans, ImageReduced)

* 填充图像region
fill_up_shape(Region1, RegionFillUp, 'area', 1, 100)

* 用圆形结构元素打开一个区域。
opening_circle (RegionFillUp, RegionOpening, 15.5)

* 开运算
opening_rectangle1 (RegionFillUp, RegionOpening, 140, 100)

* 面积筛选
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 800, 1100)

* 排序
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')

*计算区域的最小外接圆参数。
smallest_circle (SortedRegions, Row, Column, Radius)

* 彩色图转灰度图
rgb1_to_gray (Image, GrayImage)

# ================================================================================
一.图像分割
	1 => 灰度直方图的使用
	2 => 阈值分割
		threshold (Image, Region, 100, 255) # 二值化
		binary_threshold (GrayImage, Region, 'smooth_histo', 'light', UsedThreshold) # 自动阈值分割
		dyn_threshold (ImageMean, GrayImage, RegionDynThresh, 25, 'dark') #使用局部阈值分割图像 动态阈值分割 + mean_image
		mean_image (GrayImage, ImageMean, 10,10) 平均平滑。图像不均匀用动态 
二.区域集合运算及变换
	1 => 集合运算
		union1 (RegionDynThresh, RegionUnion) # 合并
		difference (RegionUnion, RegionUnion, RegionDifference) # 差集  地府润次
		intersection (SelectedRegions, ConnectedRegions, RegionIntersection) # 交集  
		complement # 补集 con p men t
	2 => 区域变换
		connection (RegionDynThresh, ConnectedRegions) # 打散
		fill_up (ConnectedRegions, RegionFillUp) # 填充
		shape_trans (RegionFillUp, RegionTrans, 'convex') # 变换区域的形状。
		skeleton (RegionTrans, Skeleton) # 骨架
三.形态学  # (fin.hdev, dyn_threshold.hdev, hull.hdev, rim.hdev)
		opening (RegionDynThresh, RegionDynThresh, RegionOpening) # 开运算
		opening_circle (RegionDynThresh, RegionOpening, 3.5)
		closing_circle (RegionDynThresh, RegionClosing, 3.5) # 闭运算
		dilation1 (RegionClosing, RegionClosing, RegionDilation, 1) # 膨胀 扩张区。
		erosion1 (RegionDilation, RegionDilation, RegionErosion, 1) # 腐蚀
		boundary (RegionErosion, RegionBorder, 'inner') # 减少一个区域到它的边界。 分界线,获取边缘

四.特征提取
		area_center (RegionDynThresh, Area, Row, Column) # 计算区域的面积和中心。
		select_shape (RegionDynThresh, SelectedRegions, 'area', 'and', 150, 99999) # 根据形状特征选择区域。
		inner_circle (SelectedRegions, Row1, Column1, Radius)  # 区域最大内圆。
		smallest_circle (SelectedRegions, Row2, Column2, Radius1) # 计算区域的最小外接圆参数。
		orientation_region (SelectedRegions, Phi) # 区域定位。
		region_features (SelectedRegions, 'area', Value) # 计算区域的形状特征。



#==========================================玩法======================================================
dilation_circle (Region2, RegionDilation1, 3.5)
erosion_circle (Region2, RegionErosion2, 3.5)
difference (RegionDilation1, RegionErosion2, RegionDifference1)
# 膨胀 收缩 取差集 得出轮廓
# closing 先膨胀在收缩
# opening 先收缩在膨胀

创建圆弧XLD轮廓 gen_circle_contour_xld
select_obj() # 从对象元组中选择指定索引的对象。
write_region() # 保存区域
* 设置文本光标的位置。
set_tposition (WindowHandle, Row3-200, Column3)
write_string()

# ======================================================================================
距离工具
	1.点到点 distance_pp   在指定点生成一个十字状的轮廓。gen_cross_contour_xld
	2.点到直线 distance_pl
	3.点到区域的最长最短 distance_pr
	4.直线到区域最长最短 distance_lr (平面度)
	5.区域与区域最短 distance_rr



BLOB分析 几何变换(区域的几何变换,仿射变换,运用几何变换定位处理区域)
	1.几何变换
		1 平移 move_region; 可以做区域位置平移,平移后相减可以得到区域某一边的边缘
		2 缩放 zoom_region
		3 镜像 mirror_region  (height/2) *2 
		4 倒置 transpose_region;
		5 极坐标与笛卡尔坐标互换 polar_trans_region() , polar_trans_region_inv() # 相反的, (circle_barcode) 
		  invert_image() 反转图片 白变黑 


	2 仿射变换 
		1 区域的任意变换 affine_trans_region
		2 创建二维变换矩阵 hom_mat2d_identity
		3 平移 hom_mat2d_translate
		4 缩放 hom_mat2d_scale
		5 旋转 hom_mat2d_rotate
		6 刚性 仿射变换 vector_angle_to_rigid 对象图,区域进行仿射变换
		7 扩展图像变换 affine_trans_image
		综合例程讲解: ball_seq, check_blister, check_bottle, clip, find_pads , count_pellets




扩展灰度(expand_gray)
	填补空白区域之间(取决于灰度或彩色)或分裂重叠区域。



图像取通道(access_channel)
获取一个多通道图像的一个通道;
	多通道图像(MultiChannelImage)   ---   输出对象(input_object)
	输入多通道图像

	输出图像(Image)   ---   输出对象(output_object)
	输出指定的通道图像

	通道(Channel)   ---   输入元组(input_control)
	通道数量,默认值:1;参考值:1,2,3,4,5,6,7,8,9,10,11,12,该值必须1≤Chnnel

区域方向(orientation_region)
区域定位。

	区域(Regions)   ---   输出对象(input_object)
	将要检查的区域(s)。

	区域方向弧度(Phi)   ---   输出元组(output_control)
	区域定位(电弧测量)。
posted @ 2022-01-04 23:25  LD_Dragon_sky  阅读(258)  评论(0编辑  收藏  举报