Code:

 1 import cv2
2 import numpy as np
3
4 img = np.zeros((200, 200), dtype=np.uint8)
5 img[50:150, 50:150] = 255
6
7 # ret, thresh = cv2.threshold(img, 127, 255, 0)
8 contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
9 color = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
10 img = cv2.drawContours(color, contours, -1, (0, 255, 0), 2)
11 cv2.imshow('hierarchy', img)
12 cv2.waitKey()
13 cv2.destroyAllWindows()

1、创建一个200x200的正方形,初始化为0的array数组,数据类型为uint8。

2、获取中心正方形,大小为100x100,并将中心区域的灰度级置为255。

3、对img图像进行二值化,threshold(src, threshold, maxval, type) 方法,将图像分割为目标物体和背景两部分:

  src:输入的源图像,灰度图像最常见。

  thresh:设定的阈值,用于对图像进行分割。

  maxval:当像素值超过阈值时,赋予的新的像素值。

  type:阈值化类型,包括cv2.THRESH_BINARY(大于阈值的像素设为maxval,小于阈值的像素设为0)、cv2.THRESH_BINARY_INV(大于阈值的像素设为0,小于阈值的像素设为maxval)等多种类型。

  对传入的img进行阈值化处理,0表示简单阈值化方法,即当像素点上的灰度级大于127时,则该点灰度级置为255,否则置为0。(本随笔中可以省略此段代码,但是针对其他多灰度级分布的灰度图或者彩色图这一步是必要的)

4、对img图像进行查找轮廓,findContours(image, mode, method) 方法,在二值图像中查找轮廓:

  image:输入的二值图像,通常为经过阈值化处理后的图像。

  mode:轮廓检索模式,指定轮廓的层次结构。可以选择的模式包括:

    cv2.RETR_EXTERNAL:只检测最外层的轮廓。

    cv2.RETR_LIST:检测所有的轮廓,并将其存储在列表中,不建立轮廓之间的等级关系。

    cv2.RETR_CCOMP:检测所有的轮廓,并将其组织为两级层次结构。顶层为连通域的外围边界,次层为连通域的内围边界。

    cv2.RETR_TREE:检测所有的轮廓,并将其组织为树形结构。

  method:轮廓的近似方法。可以选择的方法包括:

    cv2.CHAIN_APPROX_NONE:保存所有的轮廓点。

    cv2.CHAIN_APPROX_SIMPLE:仅保存轮廓的端点,例如一个矩形框的四个角点。

    cv2.CHAIN_APPROX_TC89_L1和cv2.CHAIN_APPROX_TC89_KCOS:使用 Teh-Chinl chain 近似算法进行轮廓压缩。

  函数的返回值包括两部分:

    contours:轮廓的坐标信息,以列表形式返回。每个轮廓都是一个由点坐标构成的数组。

    hierarchy:轮廓的层次结构信息,以多维数组形式返回。

5、将img转换成BGR图像。

6、绘画轮廓,drawContours() 方法:

  image:输入的图像,可以是彩色图像或灰度图像。

  contours:要绘制的轮廓,通常是通过 findContours 函数获取到的轮廓列表。

  contourIdx:指定要绘制的轮廓在列表中的索引。如果设置为 -1,则绘制所有的轮廓。

  color:轮廓线的颜色,可以是一个三元组 (B, G, R) 表示的颜色值。

  thickness:轮廓线的厚度,如果设置为 -1,则填充轮廓内部。

【Python】【OpenCV】轮廓检测的更多相关文章

  1. OpenCV 轮廓检测

    使用OpenCV可以对图像的轮廓进行检测.这是之前用过的代码,挺简单的,回顾一下.主要要进行以下2步操作: 1.cvThreshold():对图像进行二值化处理 2.cvFindContours(): ...

  2. OpenCV轮廓检测,计算物体旋转角度

    效果还是有点问题的,希望大家共同探讨一下 // FindRotation-angle.cpp : 定义控制台应用程序的入口点. // // findContours.cpp : 定义控制台应用程序的入 ...

  3. python opencv3 轮廓检测

    git:https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 import numpy as np # 创建一个2 ...

  4. python+opencv实现检测物体聚集区域

    内容涉及:二值图像转换 / 检测连通区域面积 / 在原图上画框等 import cv2 import numpy as np for n in open('list.txt'): # list.txt ...

  5. OpenCV—Python 轮廓检测 绘出矩形框(findContours\ boundingRect\rectangle

    千万注意opencv的轮廓检测和边缘检测是两码事 本文链接:https://blog.csdn.net/wsp_1138886114/article/details/82945328 1 获取轮廓 O ...

  6. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

  7. OpenCV图像轮廓检测

    轮廓检测: 轮廓检测的原理通俗的说就是掏空内部点,比如原图中有3*3的矩形点.那么就可以将中间的那一点去掉. 一.关键函数1.1  cvFindContours函数功能:对图像进行轮廓检测,这个函数将 ...

  8. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  9. 第十七节,OpenCV(学习六)图像轮廓检测

    1.检测轮廓 轮廓检测是图像处理中经常用到的,OpenCV-Python接口中使用cv2.findContours()函数查找检测物体的轮廓. cv2.findContours(image, mode ...

  10. python+opencv实现车牌定位

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...

随机推荐

  1. 保护个人数据安全,使用luks加密硬盘分区

    create:2023-01-24 17:44:44 准备工作 新硬盘4T,无数据.在root用户或sudo状态下执行. 首先创建分区表,由于mbr最大支持只有2T,因此分区表创建为gpt格式. 然后 ...

  2. DP模拟题

    Smiling & Weeping ----寒灯纸上,梨花雨凉,我等风雪又一年 # [NOIP2007 普及组] 守望者的逃离 ## 题目背景 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深 ...

  3. redisson分布式锁的应用——秒杀、超卖 简单例子(分布式锁相关)

    1.常见的分布式事务锁 1.数据库级别的锁 乐观锁,给予加入版本号实现 悲观锁,基于数据库的for update实现 2.Redis,基于SETNX.EXPIRE实现 3.Zookeeper,基于In ...

  4. 如何在.NET电子表格应用程序中创建流程图

    前言 流程图是一种常用的图形化工具,用于展示过程中事件.决策和操作的顺序和关系.它通过使用不同形状的图标和箭头线条,将任务和步骤按照特定的顺序连接起来,以便清晰地表示一个过程的执行流程. 在企业环境中 ...

  5. Solution -「BZOJ 3779」重组病毒

    Description Link. Given is a tree. Every node initially has a color which is different from others'. ...

  6. vue~封装一个文本框添加与删除的组件

    标签组件的效果如下 组件作用 这是一个div,包含了两个文本框,后面是添加和删除按钮 添加按钮复制出新的div,除了文本框没有内容,其它都上面一样 删除按钮将当前行div删除 组件实现 <tem ...

  7. golang Context应用举例

    Context本质 golang标准库里Context实际上是一个接口(即一种编程规范. 一种约定). type Context interface { Deadline() (deadline ti ...

  8. Python基础合集

    入门介绍 01.python由来与发展介绍 02.WEB项目开发流程 第一篇 markdown编辑器 01.markdown基本语法 02.Typora简介与安装 03.Windows上gitee+T ...

  9. .NET微服务系列之Saga分布式事务案例实践

    自从Wing正式发布以后,很多童鞋反馈对Saga分布式事务比较感兴趣,今天就跟大家分享一下"跨行转账"的分布式事务实践案例,入门使用教程请自行前往Wing官方文档. 假设自己名下有 ...

  10. 【docker简略学习】

    [docker简略学习] Docker是一个应用打包.分发.部署工具,相当于一个轻量级虚拟机.相比较VM虚拟机,可移植性更强. 一.Docker安装 下载链接:https://docs.docker. ...