📜  使用 OpenCV 查找和绘制轮廓 | Python(1)

📅  最后修改于: 2023-12-03 14:49:44.169000             🧑  作者: Mango

使用 OpenCV 查找和绘制轮廓 | Python

OpenCV 是一个流行的计算机视觉库,提供了各种各样的功能,包括图像处理、特征检测、目标跟踪等。其中,查找和绘制轮廓是常见的任务,本文将介绍如何在 Python 中使用 OpenCV 完成这一任务。

安装 OpenCV

首先,你需要安装 OpenCV。在 Python 3.x 中,你可以通过 pip 命令安装:

pip install opencv-python
加载图像

在本文中,我们将使用一张简单的图像进行演示。可以使用 OpenCV 中的 imread 函数来加载图像:

import cv2

# 加载图像
img = cv2.imread('img.jpg')
灰度化

通常情况下,我们会先将图像转换为灰度图像,这样有助于减少处理的数据量,并提高处理速度。使用 cvtColor 函数即可实现:

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
二值化

为了查找轮廓,我们需要将图像二值化。可以使用 threshold 函数来完成。这里介绍一种自适应阈值的方法:

# 自适应阈值处理
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)

上述代码中,cv2.adaptiveThreshold 函数将使用高斯加权平均来计算自适应阈值,并将图像取反(cv2.THRESH_BINARY_INV)。

查找轮廓

使用 findContours 函数查找轮廓:

# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

cv2.findContours 函数返回两个值:contourshierarchy。其中 contours 是一个 Python 列表,包含了所有的轮廓信息。

绘制轮廓

最后,我们使用 drawContours 函数将轮廓画出来:

# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)

# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.drawContours 函数接受五个参数:图像、轮廓列表、轮廓索引、颜色和线宽。这里我们将所有的轮廓都绘制出来,使用绿色和线宽为 2。

完整代码

将上述代码合并,即可得到完整代码:

import cv2

# 加载图像
img = cv2.imread('img.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 自适应阈值处理
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)

# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)

# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

恭喜,你已经学会了在 Python 中使用 OpenCV 查找和绘制轮廓的方法!