0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

二值图像分析最常见的方式

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2022-08-12 10:45 次阅读

轮廓属性

二值图像分析最常见的一个主要方式就是轮廓发现轮廓分析,其中轮廓发现的目的是为轮廓分析做准备,经过轮廓分析我们可以得到轮廓各种有用的属性信息、常见的如下:

轮廓面积

轮廓周长

轮廓几何矩

轮廓的最小外接矩形

轮廓的最大外接矩形

轮廓的最小外接圆

轮廓的最小外接三角形

轮廓拟合(支持拟合直线、椭圆、圆)

轮廓的凸包

轮廓层次信息提取

多边形逼近

计算欧拉数

函数介绍

OpenCV中提供大量轮廓分析函数,通过这些函数我们可以方便快捷的得到轮廓的各种有用属性信息、高效完成各种二值图像分析需求,下面是我总结的一些常用的函数列表与说明。

OpenCV中轮廓发现函数如下:

voidcv::findContours( InputArrayimage, OutputArrayOfArrayscontours, OutputArrayhierarchy, intmode, intmethod, Pointoffset=Point() )

参数解释如下:

image: 输入图像、八位单通道的,背景为黑色
contours: 得到的轮廓图像
hierarchy: 层次图像,根据需要提取轮廓层次信息
mode: 决定提取到层次信息内容,是多层还是单层
method: 每个轮廓的编码信息
offset: 表示轮廓偏移,默认为0

轮廓分析相关的常用函数

//计算轮廓面积 doublecv::contourArea( InputArraycontour, booloriented=false ) //计算轮廓周长 doublecv::arcLength( InputArraycurve, boolclosed ) //计算几何矩与中心距 Momentscv::moments( InputArrayarray, boolbinaryImage=false ) //计算最小外接矩形 RotatedRectcv::minAreaRect( InputArraypoints ) //计算最大外接矩形 Rectcv::boundingRect( InputArrayarray ) //计算最小外接圆/拟合圆 voidcv::minEnclosingCircle( InputArraypoints, Point2f¢er, float&radius ) //计算最小外接三角形/拟合三角形 doublecv::minEnclosingTriangle( InputArraypoints, OutputArraytriangle ) //拟合直线 voidcv::fitLine( InputArraypoints, OutputArrayline, intdistType, doubleparam, doublereps, doubleaeps ) //拟合椭圆 RotatedRectcv::fitEllipse( InputArraypoints ) //计算凸包 voidcv::convexHull( InputArraypoints, OutputArrayhull, boolclockwise=false, boolreturnPoints=true ) //多边形逼近-逼近真实形状 voidcv::approxPolyDP( InputArraycurve, OutputArrayapproxCurve, doubleepsilon, boolclosed )

灵活使用上述轮廓属性信息,可以实现对二值图像的几何形状判别、测量、面积过滤、获取每个对象的几何属性包括面积、周长、编码点、形状、层次/位置信息、欧拉数、中心位置、倾斜角度。

综合运用代码演示

2020年 以前我分享过一些综合使用的例子,列表如下(都看过你就赢了):

二值图像分析案例精选

OpenCV二值图像案例分析精选 | 第二期

OpenCV轮廓层次分析实现欧拉数计算

OpenCV寻找复杂背景下物体的轮廓

如何识别出轮廓准确的长和宽

OpenCV中几何形状识别与测量

OpenCV中BLOB特征提取与几何形状分类

OpenCV直线拟合检测

OpenCV中实现曲线与圆拟合

这里再分享一个硬币计数的例子!

原图如下:

代码如下:

//加载图像 Matimg=imread("D:/CoinsB.png"); imshow("OriginalImage",img); //阈值化操作 Matgray,binary; cvtColor(img,gray,COLOR_BGR2GRAY); floatt=threshold(gray,binary,0,255,THRESH_BINARY|THRESH_OTSU); imshow("binary",binary); imwrite("D:/binary1.png",binary); //形态学操作 Matse=getStructuringElement(MORPH_RECT,Size(3,3)); morphologyEx(binary,binary,MORPH_OPEN,se,Point(-1,-1)); //轮廓发现 vector
        
         hire
         achy; vector
         
          >contours; bitwise_not(binary,binary); findContours(binary,contours,hireachy,RETR_EXTERNAL,CHAIN_APPROX_
          SIMPLE,Point()); Matresult=img.clone(); Point2fcenter; floatradius; //轮廓分析 for(size_tt=0;t< contours.size(); t++) { double area = contourArea(contours[t]); if (area < 1000) { continue; } RotatedRect rrt = fitEllipse(contours[t]); radius = min(rrt.size.width, rrt.size.height)/2.0; circle(result, rrt.center, radius, Scalar(0, 0, 255), 4, 8, 0); Moments mm = moments(contours[t]); double cx = mm.m10 / mm.m00; double cy = mm.m01 / mm.m00; circle(result, Point(cx, cy), 2, Scalar(255, 0, 0), 2, 8, 0); } // 显示结果 imshow("result", result); imwrite("D:/drawing.png", result); waitKey(0);
         
        

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4220

    浏览量

    61876
  • 二值图像
    +关注

    关注

    0

    文章

    14

    浏览量

    8699
  • 轮廓分析
    +关注

    关注

    0

    文章

    2

    浏览量

    6086

原文标题:OpenCV | 二值图像分析的技巧都在这里

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    电动车电池最常见的几种损坏情况()

    电动车电池 最常见的几种损坏情况( ) 对导致电池失效的六种情
    发表于11-16 14:04 1w次阅读

    变频器最常见的十大故障现象和分析处理实例

    变频器是自动化工厂中 最常见的电气设备下面我们一起来看看变频器 最常见的十大故障现象和 分析处理实例。
    发表于09-14 09:11 4.9w次阅读

    labview中化结果显示的几种方式对比

    labview中 常见图像预处理操作 化的结果比较特殊,
    发表于08-16 18:19

    基于边界特征的图像化方法应用研究

    基于边界特征的 图像 化方法应用研究:边界特征是 图像的重要信息,阈值是区分 图像象素点的主要依据。研究了基于
    发表于11-08 16:28 26次下载

    图像目标邻域点法边界跟踪算法

    分析 图像识别中常用的轮廓跟踪算法,并指出其缺点。在提出目标邻域点概念的基础上,提供一种对
    发表于05-25 15:02 40次下载
    <b class='flag-5'>二</b><b class='flag-5'>值</b><b class='flag-5'>图像</b>目标邻域点法边界跟踪算法

    基于图像分块的局部阈值化方法

    针对目前局部阈值 化结果存在目标虚假或断裂的缺陷,提出了一种基于 图像分块的局部阈值 化方法。首先,将
    发表于12-05 17:11 4次下载
    基于<b class='flag-5'>图像</b>分块的局部阈值<b class='flag-5'>二</b><b class='flag-5'>值</b>化方法

    图像FPGA腐蚀算法解析

    图像的腐蚀算法过程中我们使用 图像3x3 图像
    发表于03-21 11:14 5191次阅读
    <b class='flag-5'>二</b><b class='flag-5'>值</b><b class='flag-5'>图像</b> FPGA腐蚀算法解析

    机器视觉的图像化详细分析

    传统的机器视觉通常包括两个步骤——预处理和物体检测。而沟通 者的桥梁则是 图像分割(Image Segmentation)[1]。 图像分割通过简化或改变 图像的表示形式,使得
    的头像 发表于06-16 09:22 1w次阅读

    LabVIEW:如何显示化后的图像

    LabVIEW中 常见图像预处理操作 化的结果比较特殊,
    的头像 发表于12-06 09:40 9341次阅读

    视频图像三插方式的结果

    方式有 最近点插 ,线性插 ,兰索斯插 。 下面简要介绍,并对比三种插 方式的结果。
    的头像 发表于11-09 15:39 1759次阅读

    五种最常见的五种电机冷却方式介绍

    电机的冷却 方式通常根据其功率、运行环境和设计要求来选择。以下是五种 最常见的五种电机冷却 方式
    发表于08-16 09:29 4249次阅读

    OpenCV图像分析

    图像 分析 最常见的一个主要 方式就是轮廓发现与轮廓 分析
    的头像 发表于10-20 12:25 468次阅读

    图像分析的典型案例

    最近一直有人向我提问很多 图像 分析相关的问题,特别选择了两个典型的轮廓 分析问题。进行 分析与编码
    的头像 发表于12-06 10:54 393次阅读

    图像连通区域的标记原理

    图像是一种由黑白两色组成的 图像,其像素 只有两种可能,分别对应黑色和白色。在
    的头像 发表于01-05 14:28 589次阅读

    最常见的直流负载工作方式

    最常见的直流负载工作 方式直流负载工作 方式是指在直流电路中使用的各种负载 方式。直流负载是用于测试和测量直流电源输出能力和能效的设备,可以模拟真实负载条件下的电流和功率需求。本文将详细
    的头像 发表于01-18 15:12 529次阅读