目录

一、cv2.connectedComponents()

函数原型:

输入参数解析:

返回参数解析:

二、cv2.connectedComponentsWithStats()

函数原型:

输入参数解析:

输出参数解析:

stats参数解析

cv2.rectangle()函数

三、实例


对于一个二值化图像的后续处理方式有两种方式,一种是利用cv2.findcontours()函数和cv2.ContourArea()函数对图像轮廓进行跟踪,可以得到图像轮廓的点集合,以及得到各个轮廓的面积值具体可见:

《【图像处理】——Python+opencv实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(findcontours函数和contourArea函数)》

另外一种方式就是用函数cv2.connectedComponentsWithStats()和函数cv2.connectedComponents()函数,可以得到轮廓的相关信息

一、cv2.connectedComponents()

函数原型:

retval, labels = connectedComponents(image, labels=None, connectivity=None, ltype=None)

输入参数解析:

一般指定需要进行标记的目标图像就行

image:用于标记的8位单通道图像
labels:标记的目标图像
connectivity:连通方式:4连通或8连通
Itype:输出图像的标记类型,当前只支持CV_32U和CV_16U

返回参数解析:

retval:不知道,反正用不上

labels:输出的是标记图像,所谓标记图像就是图像中每一个连通域都拥有一个标签(背景的标签是0),该标签即代表了此连通域的灰度值。例如,一幅图像中存在3个连通域(背景除外),那么他们的标签分别是1、2、3,他们的灰度值分别是1、2、3

二、cv2.connectedComponentsWithStats()

函数原型:

 retval, labels, stats, centroids =
connectedComponentsWithStats(image, labels=None, stats=None, centroids=None, connectivity=None, ltype=None)

输入参数解析:

一般指定需要进行标记的目标图像就行

image:用于标记的8位单通道图像
labels:标记的目标图像

stats:含有各个轮廓的外接矩信息和面积的一个参数

centroids:质心
connectivity:连通方式:4连通或8连通
Itype:输出图像的标记类型,当前只支持CV_32U和CV_16U

输出参数解析:

retval:不知道

labels:输出的标记图像

stats:这个参数是最有用的,含有一些轮廓的统计信息,一个numpy数组

centroids:每一个轮廓的质心,返回一个numpy数组,计算公式为:

stats参数解析

stats参数是一个numpy数组,每一行代表一个轮廓,每一行固定为5个参数,依次是:

  • CC_STAT_LEFT 组件的左上角点像素点坐标的X位置

  • CC_STAT_TOP 组件的左上角点像素点坐标的Y位置

  • CC_STAT_WIDTH 组件外接矩形的宽度,计算方式为用每一个轮廓中最右边的点的x坐标减去最左边的点的x坐标

  • CC_STAT_HEIGHT 组件外接矩形的高度,计算方式为用每一个轮廓中最下边的点的y坐标减去最上边的点的y坐标

  • CC_STAT_AREA 当前连通组件的面积(像素单位),这里统计的是轮廓所包含的像素点的个数,不是外接矩形的面积

所以stats的shape为:mx5,m是轮廓的个数,第一个轮廓是背景轮廓,前两个参数为0,0

注:这里的矩形不一定是最小外接矩形,通过外接矩形我们就可以得到图像的几何特征——细长值

最小外接矩形可旋转图像得到,在90°范围内以3°为单位增量恒距离地旋转图像,每一次旋转都计算它的外接矩形的面积值。外接矩形面积达到最小值事,就得到了我们想要的最小外接矩形。即按照3度进行图像旋转得到新的图像,对新的图像再次进行轮廓的检测跟踪以及矩形的绘制,旋转一周后,取面积最小的矩形即为最小外接矩形

根据以上的stats参数,我们可以绘制的外接矩形,具体如下:

cv2.rectangle()函数

img = rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

img:进行绘制矩形的图像

pt1:矩形左上角角点坐标,是一个元组

pt2:矩形右下角角点坐标,是一个元组

color:绘制矩形的颜色,一般通过RGB的表示方式(R.G,B)

thickness:绘制矩形的线宽,如果是负数,则将轮廓区域进行填充

linetype:线型

返回的是:绘制后的图像

    .   @brief Draws a simple, thick, or filled up-right rectangle..   .   The function cv::rectangle draws a rectangle outline or a filled rectangle whose two opposite corners.   are pt1 and pt2..   .   @param img Image..   @param pt1 Vertex of the rectangle..   @param pt2 Vertex of the rectangle opposite to pt1 ..   @param color Rectangle color or brightness (grayscale image)..   @param thickness Thickness of lines that make up the rectangle. Negative values, like #FILLED,.   mean that the function has to draw a filled rectangle..   @param lineType Type of the line. See #LineTypes.   @param shift Number of fractional bits in the point coordinates.

三、实例

代码:

import cv2
import numpy as npimg_=cv2.imread('rice.png')
img=cv2.cvtColor(img_,cv2.COLOR_BGR2GRAY)_, labels, stats, centroids = cv2.connectedComponentsWithStats(img,ltype=cv2.CV_16U)for istat in stats:if istat[3] > istat[4]:r = istat[3]else:r = istat[4]cv2.rectangle(img_, tuple(istat[0:2]), tuple(istat[0:2] + istat[2:4]), (0, 0, 255), thickness=2)cv2.imshow('',img_)
cv2.waitKey(0)
 

【图像处理】——实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(connectedComponentsWithStats()函数和connectedComponents()函数)相关推荐

  1. 【图像处理】——Python+opencv实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(findcontours函数和contourArea函数)

    目录 一.函数 cv.findContours 二.轮廓层级(返回参数hierarchy) 三.轮廓寻找方式 1. RETR_LIST 2. RETR_TREE 3. RETR_EXTERNAL 4. ...

  2. MATLAB对图像处理的填充边缘检测轮廓特征提取的imfill函数与bwperim函数

    MATLAB对图像处理的填充边缘检测轮廓特征提取. 主要函数:及其功能说明如下: imfill函数与bwperim函数:* 1.使用边缘检测和形态学检测细胞 此示例说明如何使用边缘检测和基本形态学检测 ...

  3. 二值图像分析—Hu矩实现轮廓匹配

    在OpenCV中,可以很方便的得到Hu不变距,Hu矩在图像旋转.缩放.平移等操作后,仍能保持矩的不变性,所以有时候用Hu不变距更能识别图像的特征. Hu矩由于具有尺度.旋转.平移不变性,可以用来做匹配 ...

  4. 图像处理基础操作二(边缘检测、轮廓检测、光流估计)

    目录 一.边缘检测 二.图像金字塔 三.图像轮廓检测 1.绘制图像轮廓 2.轮廓近似绘制 3.画轮廓边界矩形框 4.画轮廓外接圆 四.背景建模 五.光流估计 一.边缘检测 边缘检测通常是在保留原有图像 ...

  5. OPENCV之寻找并绘制轮廓以及提取轮廓重心坐标

    OPENCV之寻找并绘制轮廓以及提取轮廓重心坐标 1.寻找轮廓 声明:在寻找图像轮廓之前需要对图像进行阈值分割或者Canny.拉普拉斯等边缘检测算子处理. 寻找轮廓的算子: findContours( ...

  6. python opencv轮廓提取_Python + Opencv2 实现轮廓提取,轮廓区域面积计算

    对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结束,还需对轮廓所勾勒的像素面积区域统计计算. 本篇文章的主要内容就是 ...

  7. python cv2 轮廓的包络 面积_Python + Opencv2 实现轮廓提取,轮廓区域面积计算

    对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结束,还需对轮廓所勾勒的像素面积区域统计计算. 本篇文章的主要内容就是 ...

  8. pythonopencv提取轮廓区域_Python + Opencv 实现轮廓提取,轮廓区域面积计算

    Python + Opencv2 实现轮廓提取,轮廓区域面积计算: 对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结 ...

  9. Opencv(六)模板匹配、轮廓检测、轮廓周围绘制矩形框和圆形框

    模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域. 所以模板匹配首先需要一个模板图像T(给定的子图像) 另外需要一个待检测的图像-源图像S 工作方法,在带检测图像上,从左到右,从 ...

最新文章

  1. 1.PL/SQL Developer的快捷键
  2. android ScrollView 控制行数
  3. python gui测试框架_八款常用的 Python GUI 开发框架推荐
  4. Javascript 引擎工作机制(js层面梳理)
  5. 【总结】找到自适合的学习方法
  6. ASP.net与PHP两大网站开发架构优势对比
  7. HTML5 Canvas 裁剪区域
  8. 摘抄一篇:图的存储结构
  9. 缓存雪崩,缓存穿透解决方案
  10. 【开源组件】记住:不要在MySQL中使用UTF-8
  11. 微信小程序 选择微信自带的地址 用户授权选择了拒绝
  12. Java一个月学到springboot_从零开始学SpringBoot如何开始使用图文详解
  13. 一个简单的姓名生成器
  14. wso2 esb 配置mysql_WSO2企业服务总线(WSO2 ESB)介绍
  15. 简单做(ZTD)的十个好习惯总结
  16. uni-app 启动页控制
  17. 【JavaWeb】火车票管理系统 (三)用户登录-03
  18. 某大厂外包员工抢了个红包,被要求退回,太侮辱人了!千万别做外包,狗都不如...
  19. Kafka2.6版本权限认证
  20. jQuery 手风琴案例

热门文章

  1. 推荐base.css
  2. Node — 第七天 (大事件项目接口实现一)
  3. 第四章:手机平板要兼顾-探究碎片
  4. SynchronizationContext
  5. B2C和B2B之间有多大差距
  6. CuteEditor—Html在线编辑器的领航者,超强的asp.net编辑器控件
  7. ajax和Java session监听
  8. 系统带你学习 WebAPIs 第二讲
  9. vue 中slot 的具体用法
  10. css --- [读书笔记] 盒模型(边框、内外边距)