opencv python 图像轮廓/检测轮廓/绘制轮廓的方法

yizhihongxing

下面是详细的讲解“opencv python 图像轮廓/检测轮廓/绘制轮廓的方法”的完整攻略。

检测轮廓

检测图像轮廓的方法主要是通过cv2.findContours函数实现,该函数接收三个参数,分别是输入图像、轮廓检索方式以及轮廓近似方法。返回值是包含检测到的轮廓信息的列表。以下是检测轮廓的基本步骤:

  1. 读入一张图片并转化为灰度图。
import cv2
import numpy as np
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  1. 进行二值化处理。
ret, thresh = cv2.threshold(gray, 127, 255, 0)
  1. 进行轮廓检测。
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

其中,轮廓检测的方式有以下几种:
- RETR_EXTERNAL 只检测最外层轮廓
- RETR_LIST 检测所有轮廓,但不建立轮廓层次结构
- RETR_CCOMP 检测所有轮廓,并将轮廓分层,每个轮廓存储到相应的层数中
- RETR_TREE 检测所有轮廓,并重建轮廓之间的层次关系

轮廓检测的近似方法有以下几种:
- CHAIN_APPROX_NONE 以折线段方式存储轮廓,包括所有的轮廓点
- CHAIN_APPROX_SIMPLE 压缩水平、垂直和斜率等方向的冗余点,只保留该方向的重点

绘制轮廓

绘制轮廓的方法是通过cv2.drawContours函数实现,该函数接收三个参数,分别是绘制轮廓的图像、要绘制的轮廓信息以及绘制的轮廓索引。以下是绘制轮廓的基本步骤:

  1. 在检测轮廓的基础上,创建一个输出图像
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
drawing = np.zeros(img.shape,np.uint8)  # 创建一个黑色背景的图像
  1. 绘制轮廓
cv2.drawContours(drawing,contours,-1,(0,255,0),2)
cv2.imshow('output', drawing)

注意,第四个参数指定绘制轮廓的颜色,其中(0,255,0)代表纯绿色,(0,0,255)代表纯蓝色,(255,0,0)代表纯红色,(255,255,255)代表白色,(0,0,0)代表黑色等。

示例说明

以下是两个例子,展示如何检测和绘制轮廓。

示例一:检测并绘制单个轮廓

import cv2
import numpy as np

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# 绘制单个轮廓
drawing = np.zeros(img.shape,np.uint8)
cv2.drawContours(drawing,contours,0,(0,255,0),2)
cv2.imshow('output', drawing)

示例二:检测并绘制所有轮廓

import cv2
import numpy as np

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# 绘制所有轮廓
drawing = np.zeros(img.shape,np.uint8)
for i in range(len(contours)):
    cv2.drawContours(drawing,contours,i,(0,255,0),2)
cv2.imshow('output', drawing)

以上两个示例演示了如何检测并绘制单个轮廓和所有轮廓。通过了解其中的基本步骤,可以根据实际需求自由调整参数和细节,实现更加复杂的图像轮廓检测和绘制操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:opencv python 图像轮廓/检测轮廓/绘制轮廓的方法 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Python使用shutil操作文件、subprocess运行子程序

    当使用Python编写与文件或子进程相关的应用时,我们通常需要用到shutil和subprocess库。shutil提供了一种方便的方法来移动、复制和删除文件,而subprocess则能够方便地启动和管理子进程。 操作文件 复制文件或目录 可以使用shutil的copyfile(src, dst)和copytree(src, dst)函数来复制文件和目录。c…

    python 2023年6月3日
    00
  • 一篇文章带你了解Python之Selenium自动化爬虫

    让我为您详细讲解一下“一篇文章带你了解Python之Selenium自动化爬虫”的攻略。 什么是Selenium自动化爬虫 Selenium自动化爬虫是一种基于Selenium Web Driver框架实现对网站信息的爬取和收集的方法。它通过模拟用户的操作行为,来访问网站并获取网页内容,可以轻松实现动态网站的爬取。 前期准备 安装Python 在开始使用Se…

    python 2023年5月14日
    00
  • 深入解析pandas数据聚合和重组

    深入解析pandas数据聚合和重组 在pandas中,数据聚合和重组(GroupBy)是非常重要的操作,而且能够方便地实现按照某些规则进行分组,然后进行一些统计分析或其他操作。本文将会从以下几个方面对pandas数据聚合和重组进行深入解析: GroupBy基本原理 GroupBy应用 使用多个聚合函数 使用变换函数 GroupBy基本原理 GroupBy是p…

    python 2023年5月13日
    00
  • python 在指定范围内随机生成不重复的n个数实例

    针对指定范围内随机生成不重复的n个数的问题,下面提供几种实现方法。 方法一:使用 random.sample() Python 的 random 模块提供了一个 sample() 方法,可以在指定范围内随机生成不重复的 n 个数。 import random start_num = 1 # 范围起始值 end_num = 100 # 范围终止值 n = 5 …

    python 2023年6月3日
    00
  • Python turtle库的画笔控制说明

    下面就为您详细讲解Python turtle库的画笔控制说明。 简介 Python turtle库是一个小型画图库,它提供了一些基本的绘图命令,这些命令允许用户使用相对坐标移动,绘制形状,绘制线条,填充闭合图形等等。Python turtle库中最常用的命令是画笔控制命令。 画笔控制命令 Python turtle库中的画笔控制命令用于控制绘图的过程,这些命…

    python 2023年5月18日
    00
  • 详解Python常用标准库之os模块与shutil模块

    详解Python常用标准库之os模块与shutil模块 什么是os模块? os模块是Python的常用标准库之一,用于提供与操作系统相关的功能,例如文件操作、进程管理、环境变量等功能。 os模块包含了大量的方法,包括文件和目录处理、进程管理、用户身份验证等。在文件处理方面,我们可以将文件重命名、删除文件、创建文件夹等。下面就让我们通过示例来学习os模块的常用…

    python 2023年5月30日
    00
  • 为codemirror python selenium输入文本到textarea

    【问题标题】:Input text into textarea for codemirror python selenium为codemirror python selenium输入文本到textarea 【发布时间】:2023-04-06 23:49:02 【问题描述】: 我是 selenium 的新手,正在尝试将文本输入到 CodeMirror 生成的文…

    Python开发 2023年4月7日
    00
  • Python创建日历实例

    Python中创建日历实例的过程非常简单。Python内置的 calendar 模块提供了许多函数,可用于操作日历。以下是完整攻略。 导入模块 Python内置的 calendar 模块包含了日历操作的各种函数和类。因此,我们需要导入该模块。 import calendar 打印指定年份的日历 我们可以使用模块中的 calendar.calendar(yea…

    python 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部