1 OpenCV二值图像分析-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

OpenCV二值图像分析

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2023-10-20 12:25 次阅读

轮廓属性

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

轮廓面积

轮廓周长

轮廓几何矩

轮廓的最小外接矩形

轮廓的最大外接矩形

轮廓的最小外接圆

轮廓的最小外接三角形

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

轮廓的凸包

轮廓层次信息提取

多边形逼近

计算欧拉数

函数介绍

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));

//轮廓发现
vectorhireachy;
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

    文章

    4327

    浏览量

    62567
  • OpenCV
    +关注

    关注

    31

    文章

    634

    浏览量

    41337
  • 图像分析
    +关注

    关注

    0

    文章

    82

    浏览量

    18672

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

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

收藏 人收藏

    评论

    相关推荐

    Vivado HLS实现OpenCV图像处理的设计流程与分析

    本文通过对OpenCV图像类型和函数处理方法的介绍,通过设计实例描述在vivadoHLS中调用OpenCV库函数实现图像处理的几个基本步骤,完成从
    发表于 07-08 08:30

    使用opencv进行图像处理

    使用opencv进行图像处理_于仕琪,感兴趣的可以看看。
    发表于 05-03 14:45 0次下载

    图像对比度、亮度调整_《OpenCV3编程入门》书本配套源代码

    OpenCV3编程入门》书本配套源代码:图像对比度、亮度调整
    发表于 06-06 15:39 2次下载

    图像对比度、亮度调整_OpenCV3编程入门-源码例程

    OpenCV3编程入门-源码例程全集-图像对比度、亮度调整,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 16:55 2次下载

    opencv图像去噪学习总结

    OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac
    发表于 11-29 16:03 5w次阅读

    图像 FPGA腐蚀算法解析

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

    如何才能提取图像中的最大轮廓OpenCV程序免费下载

      本文档的主要内容详细介绍的是如何才能提取图像中的最大轮廓OpenCV程序免费下载。
    发表于 10-10 16:49 3次下载
    如何才能提取<b class='flag-5'>二</b><b class='flag-5'>值</b><b class='flag-5'>图像</b>中的最大轮廓<b class='flag-5'>OpenCV</b>程序免费下载

    如何使用OpenCV访问Mat图像中每个像素的

    本文档的主要内容详细介绍的是如何使用OpenCV访问Mat图像中每个像素的
    发表于 11-26 16:13 4次下载

    LabVIEW:如何显示化后的图像

    LabVIEW中常见的图像预处理操作化的结果比较特殊,图像实际上也是一种U8
    的头像 发表于 12-06 09:40 1w次阅读

    基于OpenCV扩展模块与skimage包来提取中心线

    显然OpenCV中常见的轮廓分析无法获得上面的中心红色线段,本质上这个问题是如何提取对象的骨架,提取骨架的方法在OpenCV的扩展模块中
    的头像 发表于 04-26 13:49 1984次阅读

    基于OpenCV如何提取中心线

    问题 前几天有个人问了我一个问题,问题是这样的,他有如下的一张图像: 怎么得到白色Blob中心线,他希望的效果如下: 显然OpenCV中常见的轮廓
    的头像 发表于 04-26 13:51 3764次阅读

    OpenCV中实现了图像形态学什么常见操作?

    图像形态学是图像处理的分支学科,在图像处理中占有重要地位、OpenCV中实现了
    的头像 发表于 05-27 14:11 1450次阅读
    <b class='flag-5'>OpenCV</b>中实现了<b class='flag-5'>图像</b>形态学什么常见操作?

    图像分析最常见的方式

    图像分析最常见的一个主要方式就是轮廓发现与轮廓分析,其中轮廓发现的目的是为轮廓分析做准备,经
    的头像 发表于 08-12 10:45 1217次阅读

    图像分析的典型案例

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

    图像连通区域的标记原理

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