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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2021-02-12 Xlsx库的使用
2021-02-12 Qt操作Excel--QtXlsx
2021-02-12 Qt操作Excel--QtXlsx--编译与安装
2019-02-12 QToolBox工具箱
2019-02-12 组合框QGroupBox
2019-02-12 把ui界面加入到工程中
2019-02-12 assistant文档