halcon-threshold阈值分割图像
全局阈值:适合照明比较均匀的图片
在HDevelop中
1.png
不同区域同一颜色
dev_open_window(10,10,300,300,'black',WindowHandle) read_image (Image, 'D:/bb/tu/1.png') rgb1_to_gray(Image,Image1) *将RGB图像转换为灰度图像 threshold (Image1, Region, 0, 150) *使用全局阈值分割图像--找出在最小阈值与最大阈值之间的区域 *参数1:单通道输入图像 *参数2:保存找出来的区域 *参数3:最小阈值 *参数4:最大阈值
*特别注意:这个函数与opencv中结果是不同的,opencv中得到的是二值图,halcon中得到的是区域
*想要opencv的效果看:https://www.cnblogs.com/liming19680104/p/15913519.html
*也可以看:https://www.cnblogs.com/liming19680104/p/15888213.html dev_display (Region) dev_open_window(10,10,300,300,'black',WindowHandle1) connection (Region, ConnectedRegions) *计算区域的连通域--ConnectedRegions中不同的连通域用不同的值 *参数1:输入图像区域 *参数2:输出图像区域 dev_display (ConnectedRegions) dev_open_window(10,10,300,300,'black',WindowHandle2) select_shape(ConnectedRegions,SelectedRegions, 'width', 'and', 60, 150) *根据形状特征选择区域 *参数1:输入区域 *参数2:保存满足条件的区域 *参数3:形状特征--看下面的列表 *参数4:参数关系符('and', 'or')如果只是用一种特性那么此参数没有意义 *参数5:输入参数下限值(0.0 ≤ Min ≤ 99999.0) *参数6:输入参数上限值(Max >= Min 并且 0.0 ≤ Max ≤ 99999.0) dev_display (SelectedRegions) select_shape(ConnectedRegions,SelectedRegions1, ['width','height'], 'and', [60,90], [110,210]) *多个特征 *[60,90]分别是 宽和高 的最小值 dev_open_window(10,10,300,300,'black',WindowHandle3) dev_display (SelectedRegions1)
形状特征列表
'area' 面积:区域像素点总和
'row' 中心的行坐标
'column' 中心的列坐标
'width' 区域宽度(平行于坐标轴)
'height' 区域的高度(平行于坐标轴)
'ratio' 区域的高度和宽度之比(平行于坐标轴)
'row1' 区域左上角的行坐标
'column1' 区域左上角的列坐标
'row2' 区域右下角的行坐标
'column2' 区域右下角的列坐标
'circularity' 和圆的相似度
'compactness' 密度
'contlength' 轮廓的总长度
'convexity' 凸度
'rectangularity' 类矩形因子
'ra' 主半径的等效椭圆
'rb' 次半径的等效椭圆
'phi' 和X轴的夹角
'anisometry:' 有效椭圆长轴与短轴的比值(anisometry = Ra / Rb,Ra, Rb为长轴和短轴)
'bulkiness:' 蓬松性
'struct_factor:' 结构因子
'outer_radius' 外接最小圆半径
'inner_radius' 最大内接圆半径
'inner_width' 给定区域最大的轴平行矩形的宽度
'inner_height' 给定区域最大的轴平行矩形的高度
'dist_mean' 从区域边界到区域中心的平均距离
'dist_deviation:' 从区域的边界各个点到区域中心的偏差
'roundness' 圆度
'num_sides' 多边形边数
'connect_num' 区域连接数量
'holes_num' 区域孔洞数
'area_holes' 区域孔洞的面接
'max_diameter' 区域的最大直径
'orientation' 区域的方向
'euler_number' 欧拉数
最小外接矩形:最小外接矩形长宽的一半称为长宽半轴,长轴方向称为区域的方向
存在任意角度的称为rect2,水平竖直的矩形称为rect1
'rect2_phi' 最小外接矩形角度
'rect2_len1' 最小外接区域长度的一半
'rect2_len2' 最小外接区域宽度的一半
'moments_m11' 区域的几何矩m11
'moments_m20' 区域的几何矩m20
'moments_m02' 区域的几何矩m02
'moments_ia' 区域的几何矩ia
'moments_ib' 区域的几何矩ib
'moments_m11_invar'
'moments_m20_invar'
'moments_m02_invar'
'moments_phi1'
'moments_phi2'
'moments_m21'
'moments_m12'
'moments_m03'
'moments_m30'
'moments_m21_invar'
'moments_m12_invar'
'moments_m03_invar'
'moments_m30_invar'
'moments_i1'
'moments_i2'
'moments_i3'
'moments_i4'
'moments_psi1'
'moments_psi2'
'moments_psi3'
'moments_psi4'
不同区域不同颜色
dev_open_window(10,10,389,205,'black',WindowHandle) read_image (Image, 'D:/bb/tu/1.png') rgb1_to_gray(Image,Image1) threshold (Image1, Region, [60,110],[100, 150])
*60-100 一种颜色, 110-150 另一种颜色
*也可以看:https://www.cnblogs.com/liming19680104/p/15970345.html
dev_display (Region)
在QtCreator中
不同区域同一颜色
HObject ho_Image, ho_Image1, ho_Region, ho_ConnectedRegions;
HObject ho_SelectedRegions, ho_SelectedRegions1;
HTuple hv_WindowHandle, hv_WindowHandle1, hv_WindowHandle2;
HTuple hv_WindowHandle3;
ReadImage(&ho_Image, "D:/bb/tu/1.png"); SetWindowAttr("background_color","black"); OpenWindow(10,10,300,300,0,"visible","",&hv_WindowHandle); OpenWindow(10,100,300,300,0,"visible","",&hv_WindowHandle1); OpenWindow(10,200,300,300,0,"visible","",&hv_WindowHandle2); OpenWindow(10,300,300,300,0,"visible","",&hv_WindowHandle3); Rgb1ToGray(ho_Image, &ho_Image1); //将RGB图像转换为灰度图像 Threshold(ho_Image1, &ho_Region, 0, 150); //使用全局阈值分割图像--找出在最小阈值与最大阈值之间的区域 //参数1:单通道输入图像 //参数2:分段区域 //参数3:最小阈值 //参数4:最大阈值 DispObj(ho_Region, hv_WindowHandle); Connection(ho_Region, &ho_ConnectedRegions); //计算区域的连通域--ConnectedRegions中不同的连通域用不同的值 //参数1:输入图像区域 //参数2:输出图像区域 DispObj(ho_ConnectedRegions, hv_WindowHandle1); SelectShape(ho_ConnectedRegions, &ho_SelectedRegions, "width", "and", 60, 150); //根据形状特征选择区域 //参数1:输入区域 //参数2:保存满足条件的区域 //参数3:形状特征--看下面的列表 //参数4:参数关系符('and', 'or')如果只是用一种特性那么此参数没有意义 //参数5:输入参数下限值(0.0 ≤ Min ≤ 99999.0) //参数6:输入参数上限值(Max >= Min 并且 0.0 ≤ Max ≤ 99999.0) DispObj(ho_SelectedRegions, hv_WindowHandle2); SelectShape(ho_ConnectedRegions, &ho_SelectedRegions1, (HTuple("width").Append("height")), "and", (HTuple(60).Append(90)), (HTuple(110).Append(210))); //多个特征 //[60,90]分别是 宽和高 的最小值 DispObj(ho_SelectedRegions1, hv_WindowHandle3);
不同区域不同颜色
HObject ho_Image, ho_Image1, ho_Region; ReadImage(&ho_Image, "D:/bb/tu/1.png"); Rgb1ToGray(ho_Image, &ho_Image1); Threshold(ho_Image1, &ho_Region, (HTuple(60).Append(110)), (HTuple(100).Append(150)));
//60-100 一种颜色, 110-150 另一种颜色
//也可以看:https://www.cnblogs.com/liming19680104/p/15970345.html