OpenCV(三十二):轮廓检测

1.轮廓概念介绍

        在计算机视觉和图像处理领域中,轮廓是指在图像中表示对象边界的连续曲线。它是由一系列相邻的点构成的,这些点在边界上连接起来形成一个封闭的路径。

轮廓层级:

       轮廓层级(Contour Hierarchy)是指在包含多个轮廓的图像中,轮廓之间的包含关系和顺序关系。

以下是上图中不同层级的结构关系:

0:【-1,-1,1,-1】

1:【2,-1,-2,0】

2:【-1,1,3,0】

3:【-1,-1,-1,2】

2.轮廓检测与绘制

2.1轮廓检测findContours() 

void cv::findContours ( InputArray  image,

OutputArrayOfArrays      contours,

OutputArray                     hierarchy,

int                                     mode,

int                                      method,

Point                                  offset =Point()

  • image: 输入图像,数据类型为CV_8U的单通道灰度图像或者二值化图像。
  • contours:检测到的轮廓,每个轮廓中存放着像素的坐标。
  • mode:轮廓检测模式标志
  • method:轮廓逼近方法标志。
  • ofiset: 每个轮廊点移动的可选偏移量。这个函数主要用在从ROI图像中找出的轮廓并基于整个图像分析轮廓的场景中。
2.2轮廓绘制drawContours()

void cv::drawContours ( InputOutputArray   image,

InputArrayOfArrays    contours,

int                               contourldx,

const Scalar &             color,

int                                thickness = 1,

int                                lineType = LINE_8,

InputArray                   hierarchy =noArray(),

int                               maxLevel = INT_MAX,

Point                           offset = Point()

)

参数说明:

  • image:输入/输出图像,绘制轮廓的目标图像。通常为三通道彩色图像。
  • contours:输入参数,表示轮廓的数据结构。可以是单个轮廓或轮廓的数组。
  • contourIdx:指定要绘制的轮廓的索引。如果为负数,则绘制所有轮廓。
  • color:绘制轮廓的颜色。可以通过 Scalar 形式指定,例如 Scalar(0, 0, 255) 表示红色。
  • thickness:轮廓线的宽度,默认为1。如果将其设置为负数(例如-1),则会填充轮廓内部。
  • lineType:轮廓线的类型,默认为8连接线。
  • hierarchy:可选参数,表示轮廓之间的层级关系。
  • maxLevel:可选参数,指定绘制轮廓的最大层级。
  • offset:可选参数,指定轮廓相对于图像的偏移量。

3.示例代码

void image_Contours(Mat image){Mat gray,binary;cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化GaussianBlur(gray,gray,Size(13,13),4,4);//滤波threshold(gray,binary,170,255,THRESH_BINARY|THRESH_OTSU);//自适应二值化//轮廓发现与绘制vector<vector<Point>> contours;//轮廓vector<Vec4i> hierarchy;//存放轮廓结构变量findContours(binary,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());//绘制轮廓ostringstream ss;for(int i=0;i<hierarchy.size();i++){ss << hierarchy[i]<< std::endl;}LOGD("%s",ss.str().c_str());for(int t=0;t<contours.size();t++){drawContours(image,contours,t,Scalar(0,0,255),2,8);}imwrite("/sdcard/DCIM/img.png",image);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/103459.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一生一芯10——verilator v5.008环境搭建

搜索 verilator 官网&#xff0c;得到网址如下&#xff1a; https://www.veripool.org/verilator/ 点击download 找到 git quick install 可以看到git快捷安装所需命令行 可以看到&#xff0c;需要预先安装下面的包文件&#xff0c;去掉前面的#注释符号进行安装 直接进行下面…

SpringMVC增删改查(CRUD)的实现

目录 前言 一、前期准备 1.pom.xml---依赖与插件的导入 2.jdbc.properties---数据库连接 3.log4j2.xml---日志文件 4.spring-mybatis 5.spring-context 6.spring-mvc 二、增删改查的实现 1.model与mapper层的生成 2.biz层 3.工具类 4.controller层 三、测试结果 总…

gRPC-GateWay Swagger 实战

上一次我们分享了关于 gRPC-Gateway 快速实战 &#xff0c;可以查看地址来进行回顾 : 也可以查看关于 gRPC 的历史文章&#xff1a; gRPC介绍 gRPC 客户端调用服务端需要连接池吗&#xff1f; gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I 今天主要是分享关于 gRPC-G…

【Git】Git 分支

Git 分支 1.分支简介 为了真正理解 Git 处理分支的方式&#xff0c;我们需要回顾一下 Git 是如何保存数据的。 或许你还记得 起步 的内容&#xff0c; Git 保存的不是文件的变化或者差异&#xff0c;而是一系列不同时刻的 快照 。 在进行提交操作时&#xff0c;Git 会保存一…

视频集中存储/直播点播平台EasyDSS点播文件分类功能新升级

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法&#xf…

Vue2项目练手——通用后台管理项目第八节

Vue2项目练手——通用后台管理项目 菜单权限功能tab.jsLogin.vueCommonAside.vuerouter/index.js 权限管理问题解决router/tab.jsCommonHeader.vuemain.js 菜单权限功能 不同的账号登录&#xff0c;会有不同的菜单权限通过url输入地址来显示页面对于菜单的数据在不同页面之间的…

如何在`Pycharm`中配置基于WSL的`Python Interpreters`,以及配置基于WSL的`Terminal`

文章目录 一、创建pycharm用户并授予sudo权限0. 启动WSL下的CentOS1. 创建pycharm用户并授予sudo权限2. 设置pycharm用户为wsl启动Linux的默认用户3. 重启并重新登录wsl下的CentOS4. 验证pycharm用户的sudo权限 二、创建基于WSL的Python Interpreter1. 添加基于WSL的Python Int…

查看视频文件关键帧间隔

一、Elecard StreamEye Tools拖放视频文件查看。 红的是I帧&#xff1b;蓝的是P帧&#xff1b;绿的是B帧。 二、ffprobe -show_streams统计。 1、统计视频关键帧、非关键帧 ffprobe.exe -i 1.mp4 -show_streams v -show_packets -print_format json > d:\1.json 再统计1.j…

Greenplum执行SQL卡住的问题

问题 今天社区群里面一位同学反映他的SQL语句执行会hang住&#xff0c;执行截图如下。 分析 根据提示信息&#xff0c;判断可能是网络有问题&#xff0c;或者是跟GP使用UDP包有关系。 此同学找了网络检查的人确定网络没有问题&#xff0c;于是猜测跟UDP包有关。 参考文章ht…

Linux常用命令——convertquota命令

在线Linux命令查询工具 convertquota 把老的配额文件转换为新的格式 补充说明 convertquota命令用于将老的磁盘额数据文件&#xff08;“quota.user”和“quota.group”&#xff09;转换为新格式的文件&#xff08;“quota.user”和“quota.group”&#xff09;。 语法 c…

Vite + vue3 项目使用 amfe-flexible 和 postcss-pxtorem 实现不同屏幕自适应

amfe-flexible 和 postcss-pxtorem 可以一起使用来实现移动端的适配效果。 amfe-flexible 主要用于动态设置根元素字体大小&#xff08;rem&#xff09;&#xff0c;以根据屏幕尺寸进行自适应布局。它会根据设备的屏幕宽度计算出根元素字体大小&#xff0c;并将其设置为页面的根…

微信小程序使用 scss

一、在 vscode 中安装 easy sass 扩展 二、在微信开发者工具导入 vscode 安装的 easy sass 扩展 安装完成后会让重新加载扩展 再次打开后就可以看到扩展已经有 easy sass 了 三、修改 easy sass 配置 重新加载扩展后&#xff0c;默认情况下这个扩展是已经启动的&#xff0c…