Python Opencv轮廓常用操作代码实例解析

当使用Python和OpenCV进行图像处理时,常常需要使用轮廓操作。本文将介绍PythonOpencv轮廓常用操作的代码实例。通过阅读本文,您将了解如何通过轮廓检测、绘制、筛选等常用操作,提取图像中的轮廓信息。

轮廓检测

在OpenCV中,cv2.findContours()函数用于检测图像中的轮廓,其参数包括:

  • 需要进行轮廓检测的图像
  • 轮廓检测模式
  • 轮廓近似方法

以下是一个轮廓检测的示例代码:

import cv2

image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

以上代码中,首先读入一张图片并将其转换成灰度图像,然后使用二值化方法(cv2.threshold())将图像进行处理。最后,使用cv2.findContours()函数检测图像中的轮廓,返回的轮廓信息包括contourshierarchy两个值。

轮廓绘制

使用cv2.drawContours()函数可以将检测到的轮廓绘制在原图像上,其参数包括:

  • 原图像
  • 要绘制的轮廓
  • 轮廓索引(-1表示绘制所有轮廓)
  • 绘制颜色
  • 绘制线条宽度

以下是一个轮廓绘制的示例代码:

import cv2

image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码中,使用cv2.drawContours()函数将检测到的轮廓绘制在原图像上。-1表示绘制所有轮廓,绘制颜色为绿色,线条宽度为2个像素。最后使用cv2.imshow()函数显示结果图,并等待用户按下任意键关闭窗口。

轮廓筛选

轮廓检测得到的轮廓信息包括很多无用的轮廓,为了只提取出需要的轮廓,需要进行轮廓筛选。轮廓筛选的方法包括面积筛选、周长筛选和形状筛选等。

以下是一个轮廓面积筛选的示例代码:

import cv2

image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

for i in range(len(contours)):
    area = cv2.contourArea(contours[i])
    if area > 100:
        cv2.drawContours(image, contours, i, (0, 255, 0), 2)

cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码中,首先进行轮廓检测,然后使用循环遍历得到的所有轮廓。计算每个轮廓的面积并与阈值比较,如果大于100,就将该轮廓绘制在原图像上。

另一个示例是轮廓周长筛选,以下是示例代码:

import cv2

image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

for i in range(len(contours)):
    perimeter = cv2.arcLength(contours[i], True)
    if perimeter > 50:
        cv2.drawContours(image, contours, i, (0, 255, 0), 2)

cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码中,使用cv2.arcLength()函数计算每个轮廓的周长,并与阈值比较。如果周长大于50,就将该轮廓绘制在原图像上。

通过本文的介绍,我们了解了PythonOpencv轮廓的常用操作,包括轮廓检测、绘制和筛选等。使用这些操作能够很好地提取图像中的轮廓信息,并进一步进行图像处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Opencv轮廓常用操作代码实例解析 - Python技术站

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

相关文章

  • MacOS(M1芯片 arm架构)下安装PyTorch的详细过程

    在MacOS(M1芯片 arm架构)下安装PyTorch的过程中,需要注意以下几个步骤: 安装Xcode Command Line Tools 在终端中输入以下命令安装Xcode Command Line Tools: xcode-select –install 安装Homebrew 在终端输入以下命令安装Homebrew: /bin/bash -c &q…

    python 2023年5月14日
    00
  • numpy下的flatten()函数用法详解

    以下是关于“numpy下的flatten()函数用法详解”的完整攻略。 背景 在NumPy中,可以使用flatten()函数将多维数组转换为一维数组。本攻略将介绍如何使用flatten()函数,并提供两个示例来演示它的用法。 flatten()函数 flatten()用于将多维数组转换为一维数组。可以使用以下语法: import numpy as np # …

    python 2023年5月14日
    00
  • python的numpy模块实现逻辑回归模型

    Python的NumPy模块实现逻辑回归模型 逻辑回归是一种常见的分类算法,可以用于二分类和多分类问题。在Python中,可以使用NumPy模块实现逻辑回归模型。本文将详细讲解Python的NumPy模块实现逻辑回归型的完整攻略,包括数据预处理、模型训练、模型预测等,并提供两个示例。 数据预处理 在使用NumPy模块实现逻辑回归模型之前,需要对数据进行预处理…

    python 2023年5月13日
    00
  • 解决numpy和torch数据类型转化的问题

    下面是关于“解决numpy和torch数据类型转化的问题”的完整攻略,包含了两个示例。 示例一:将 numpy 数组转换为 PyTorch 张量 在 PyTorch 中,我们可以使用 torch.from_numpy() 函数将 numpy 数组转换为 PyTorch 张量。下面是一个示例,演示如何将 numpy 数组转换为 PyTorch 张量。 impo…

    python 2023年5月14日
    00
  • NumPy数组的广播是什么意思?

    在NumPy中,广播(broadcasting)指的是不同形状的数组之间进行算术运算的规则。当两个数组的形状不同时,如果满足一些特定的条件,NumPy将自动地对它们进行广播以使得它们的形状相同。 广播的规则如下: 当两个数组的形状长度不同时,在较短的数组的前面加上若干个1,直到长度与较长的数组相同。 如果两个数组的形状在任何一个维度上不同且不同维度的长度不同…

    2023年3月1日
    00
  • python中np是做什么的

    以下是关于“Python中np是做什么的”的完整攻略。 NumPy简介 NumPy是Python中的一个开源数学库,用于处理大型多维数组和矩阵。它提供了高效的数组操作和数学函数,可以用于科学计算、数据分析、机器学习等领域。 NumPy的主要特点包括: 多维数组对象ndarray,支持向量化运算和广播功能。 用于对数组进行快速操作标准数学函数。 用于读写磁盘数…

    python 2023年5月14日
    00
  • Python numpy大矩阵运算内存不足如何解决

    以下是关于“Python numpy大矩阵运算内存不足如何解决”的完整攻略。 背景 在Python中,当我们使用numpy进行大矩阵运算时,可能会遇到内存不足的问题。本攻将介绍如何解决这个问题,并提供两个示例来演示如何使用numpy进行大矩阵运算。 解决内存不足问题 当我们使用numpy进行大矩阵运算时,可能会遇到内存不足的问题。以下是一些解决内存不足问题的…

    python 2023年5月14日
    00
  • NumPy实现ndarray多维数组操作

    NumPy是Python中一个重要的科学计算库,提供了高效的多维数组和各种派生对象及计算种函数。NumPy中,可以使用ndarray多维数组来进行各种操作,包括创建、索引、切片、运算等。本文将详细讲解NumPy实现ndarray多维数组操作的完整攻略,并提供了两个示例。 创建ndarray多维数组 在NumPy中,可以使用array()函数来创建ndarra…

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