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

下面是详细的讲解“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命令行参数argv和argparse该如何使用

    下面就来详细讲解一下“Python命令行参数argv和argparse该如何使用”的完整攻略。 Python命令行参数argv 在Python中,使用argv可以接受在命令行中传入的参数,这些参数可以在运行程序时动态的传入,与程序代码分离,从而方便程序的调用和使用。 在Python中,我们可以通过sys模块的argv方法来获取命令行传入的参数,如下所示: i…

    python 2023年6月3日
    00
  • 浅析Python四种数据类型

    浅析Python四种数据类型 在Python中,常用的数据类型有四种,分别是数字、字符串、列表和元组。本篇文章将从各种数据类型的定义、特点、常见用途和代码示例等方面,对这四种数据类型进行简要分析和介绍。 数字 数字在Python中是一种基本的数据类型,用于表示数值。Python支持三种不同类型的数字:整数、浮点数和复数。 整数:由数字0-9组成,可以是正数、…

    python 2023年6月5日
    00
  • python爬虫爬取幽默笑话网站

    Python爬虫爬取幽默笑话网站攻略 一、确定目标网站 首先需要决定要爬取的目标网站,以本次任务为例,我们选取了幽默笑话网站(http://www.laugh123.cn/)。 二、分析目标网页结构 在开始编写爬虫代码之前,需要分析目标网页的结构,确定需要收集哪些信息以及信息的位置。 例如,我们需要爬取的信息包括标题和内容,那么我们需要查看目标网页的源代码,…

    python 2023年5月14日
    00
  • python 显示数组全部元素的方法

    当我们想要显示 Python 中的数组全部元素时,通常使用如下两种方法: 方法一:使用 for 循环 arr = [1, 2, 3, 4, 5] for i in arr: print(i, end=" ") 上面的代码中,我们将 arr 列表中的全部元素一个一个取出,然后使用 print() 函数将它们打印出来。这里注意,我们使用 en…

    python 2023年6月5日
    00
  • Python创建一个元素都为0的列表实例

    创建一个元素都为0的列表实例,可以使用Python内置的list()函数和列表推导式两种方法。 方法一:使用list()函数 使用list()函数可以创建一个定长度的元素都为0的列表实例。具体实现方法是:调用list()函数,并传入一个整数n作为参数,表示的长度。然后,使用[0]*n的方式初始化列表,即将0乘以n个,得到一个长度为的元素都为0的列表。 下面是…

    python 2023年5月13日
    00
  • 33个Python爬虫项目实战(推荐)

    “33个Python爬虫项目实战”是一份非常实用的Python爬虫项目合集,包含了33个不同的爬虫项目,涵盖了各种类型的网站和数据。本文将详细讲解“33个Python爬虫项目实战”的完整攻略,包括使用BeautifulSoup库和Scrapy框架两个示例。 使用BeautifulSoup库爬取网页数据的示例 以下是一个示例,演示如何使用BeautifulSo…

    python 2023年5月15日
    00
  • python regex库实例用法总结

    Python regex库实例用法总结 什么是正则表达式? 正则表达式(Regular Expression) 是用来匹配字符串中字符组合的一种方式。正则表达式是对字符串操作的一种逻辑公式,就是处理字符串的一种方式。正则表达式也称作正规表示法、正规表示式、正规表达式、规则表达式、常规表示法(英文Regular Expression)。 在Python中,可以…

    python 2023年6月3日
    00
  • 详解在Python中使用OpenCV进行直线检测

    详解在Python中使用OpenCV进行直线检测 OpenCV是一个强大的计算机视觉库,它在图像处理、视频处理、目标识别等方面有很高的应用价值。在本文中,我将详细介绍如何使用Python和OpenCV进行直线检测。 安装OpenCV 在Python中使用OpenCV需要先安装OpenCV库。如果你还没有安装,可以通过以下命令在命令行中进行安装: pip in…

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