opencv入门九,图像矩, 点多边形测试, 基于距离变换与分水岭的图像分割

图像矩

moments(
InputArray  array,//输入数据
bool   binaryImage=false // 是否为二值图像
)

面积

contourArea(
InputArray  contour,//输入轮廓数据
bool   oriented// 默认false、返回绝对值)

弧长

arcLength(
InputArray  curve,//输入曲线数据
bool   closed// 是否是封闭曲线)

过程:
提取图像边缘
发现轮廓
计算每个轮廓对象的矩
计算每个对象的中心、弧长、面积

点多边形测试

测试一个点是否在给定的多边形内部,边缘或者外部

pointPolygonTest(
InputArray  contour,// 输入的轮廓
Point2f  pt, // 测试点
bool  measureDist // 是否返回距离值,如果是false,1表示在内面,0表示在边界上,-1表示在外部,true返回实际距离
返回数据是double类型)

基于距离变换与分水岭的图像分割

cv::distanceTransform(InputArray  src, OutputArray dst,  OutputArray  labels,  int  distanceType,  int maskSize,  int labelType=DIST_LABEL_CCOMP)
distanceType = DIST_L1/DIST_L2,
maskSize = 3x3,最新的支持5x5,推荐3x3、
labels离散维诺图输出
dst输出8位或者32位的浮点数,单一通道,大小与输入图像一致

cv::watershed(InputArray image, InputOutputArray  markers)

流程
1.将白色背景变成黑色-目的是为后面的变换做准备
2. 使用filter2D与拉普拉斯算子实现图像对比度提高,sharp
3. 转为二值图像通过threshold
4. 距离变换
5. 对距离变换结果进行归一化到[0~1]之间
6. 使用阈值,再次二值化,得到标记
7. 腐蚀得到每个Peak - erode
8.发现轮廓 – findContours
9. 绘制轮廓- drawContours
10.分水岭变换 watershed
11. 对每个分割区域着色输出结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值