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. CFS-GA 相关性特征选择与遗传算法 特征选择/特征提取

    CFS-GA特征选择/特征提取 CFS 对于一个样本空间,构造一个二维矩阵A代表此样本空间,A中每行代表一条数据,每列代表一个特征 样本中的数据分为数个特征,其中\(A_i\)表示第\(i\)个特征, ...

  2. Linux部署项目常用命令(持续更新)

    防火墙配置 # 启动防火墙服务 systemctl start firewalld # 关闭防火墙服务 systemctl stop firewalld # 查看防火墙服务状态 systemctl s ...

  3. 基于go语言gin框架的web项目骨架

    该骨架每个组件之间可单独使用,组件之间松耦合,高内聚,组件的实现基于其他三方依赖包的封装. 目前该骨架实现了大多数的组件,比如事件,中间件,日志,配置,参数验证,命令行,定时任务等功能,目前可以满足大 ...

  4. STL 迭代器

    工作之余看了一下<<accelerated c++>>这本书,挺有意思没,没有一大堆概念,直接就开始一步一步编写代码. 书中时不时会涉及到一些stl的概念,比如容器,算法,迭代 ...

  5. log4j漏洞CVE-2021-44228复现-排雷篇

    一.环境搭建(用相同的环境才能保证一定成功) 下载vulhub,其他环境可能存在GET请求无效问题: git clone https://github.com/vulhub/vulhub.git 切换 ...

  6. 如何将Python程序打包并保护源代码

    导言: 在某些情况下,我们可能希望将Python程序打包成可执行文件,以便用户无法查看程序的源代码.这种需求通常出现在商业软件.数据分析工具或其他需要保护知识产权的场景中.本文将介绍如何使用PyIns ...

  7. 用结构化思维解一切BUG(1):核心思路

    面对万"卷"世界,有人选择拼命学习新技术,解决眼前的.点状问题:有人提升思维层级,解决未来的.系统问题.您选择什么? 背景 我有10多年编程经验和研发管理经历,虽很久不写代码,但有 ...

  8. 【行云流水线实践】基于“OneBuild”方法对镜像进行快速装箱

    在云原生领域,无论使用哪种编排调度平台,Kubernetes,DockerSwarm,OpenShift等,业务都需要基于镜像进行交付,我们在内部实践"Source-to-image&quo ...

  9. JS判断点是否在线段上

    本文利用向量的点积和叉积来判断点是否在线段上. 基础知识补充 从零开始的高中数学--向量.向量的点积.带你一次搞懂点积(内积).叉积(外积).Unity游戏开发--向量运算(点乘和叉乘 说明 点积可以 ...

  10. 栈与队列应用:迷宫问题(DFS非最短路径)

    //先输入行列,在输入迷宫 以-1 -1 结束 #include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 #define ...