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日

相关文章

  • NumPy 矩阵乘法的实现示例

    以下是NumPy矩阵乘法的实现示例的详解: NumPy矩阵乘法 NumPy中的矩阵乘法是通过dot函数实现的。矩阵乘法是指将两个矩阵相乘得到一个新的矩阵。以下是一个矩阵乘法的示例: import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) c = np.d…

    python 2023年5月14日
    00
  • Python编程不要再使用print调试代码了

    Python编程不要再使用print调试代码了 在Python编程中,调试代码是一个非常重要的过程。在过去,我们通常使用print语句来调试代码。但是,这种方法有时会很麻烦,尤其是在调试大型代码库时。在本攻略中,我们将介绍一些替代print语句的方法,以帮助您更有效地调试Python代码。 为什么不要使用print语句? 使用print语句调试代码的主要问题…

    python 2023年5月14日
    00
  • Numpy如何检查数组全为零的几种方法

    以下是关于“Numpy如何检查数组全为零的几种方法”的完整攻略。 背景 在NumPy中,有时需要检查数组是否全为零。本攻略将介绍Py中查数组全为零的几种,并提供两个示例来演示如何使用这些方法。 方法1:np.all() np.all()函数于检查数组中的所有元素是否都为True。可以使用以下语法: import numpy np # 检查数组是否全为零 re…

    python 2023年5月14日
    00
  • python 利用opencv实现图像网络传输

    以下是Python利用OpenCV实现图像网络传输的完整攻略,包括两个示例。 OpenCV实现图像网络传输的基本步骤 OpenCV实现图像网络传输的基本步骤如下: 导入必要的库 import cv2 import numpy as np import socket import struct 创建服务器 创建服务器并监听客户端连接。 # 创建服务器 serv…

    python 2023年5月14日
    00
  • 详解NumPy常用的数组的扩展和压缩方法

    NumPy数组的扩展和压缩是指在不改变数组元素的情况下,改变数组的形状或尺寸。 数组的扩展 数组的扩展是指将一个数组扩展成一个更大或更小的形状。NumPy提供了几种方式来扩展数组,包括: numpy.reshape() numpy.resize() numpy.append() numpy.reshape() reshape()函数用于改变数组的形状,返回一…

    2023年3月1日
    00
  • 解决安装pytorch因网速问题失败的情况

    在安装PyTorch时,由于网络问题可能会导致安装失败。以下是解决安装PyTorch因网速问题失败的情况的完整攻略,包括使用清华大学镜像源和使用Anaconda安装PyTorch两种方法: 使用清华大学镜像源安装PyTorch 清华大学提供了PyTorch的镜像源,可以通过修改pip的源来使用清华大学的镜像源进行安装。具体步骤如下: 打开pip的配置文件 在…

    python 2023年5月14日
    00
  • 纯numpy卷积神经网络实现手写数字识别的实践

    简介 卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,广泛应用于图像识别、语音识别等领域。本文将介绍如何使用纯numpy实现一个简单的卷积神经网络,用于手写数字识别。 数据集 我们将使用MNIST数据集,该数据集包含60,000个训练图像和10,000个测试图像,每个图像都是28×28像素的灰度图像。我们将…

    python 2023年5月14日
    00
  • Python:一行代码,导入Python所有库

    要导入Python所有库,可以在Python交互式命令行或者Python脚本中使用以下一行代码: import this 这个语句实际上是导入了Python的Zen文化准则,但它又利用了Python解释器启动时,会默认执行一个shell脚本的机制。这个shell脚本的默认路径中包含了所有Python标准库的路径,所以在执行import this的时候,Pyt…

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