返回

OpenCV查找轮廓:获取边界框的指南

开发工具

使用 OpenCV 查找轮廓,获取边界框

介绍

计算机视觉中,轮廓是一个连接的点集合,它定义了一个形状的边界。OpenCV 提供了一个强大的函数 findContours,可用于查找图像中的轮廓。本文将介绍如何使用 findContours 函数,并提供示例代码来查找轮廓和获取其边界框。

查找轮廓

要使用 OpenCV 查找轮廓,需要先将图像转换为二值图像。这可以通过使用 cv2.threshold 函数完成。然后,可以调用 findContours 函数,该函数需要以下参数:

  • 二值图像
  • 轮廓检索模式
  • 轮廓近似方法

轮廓检索模式指定如何检索轮廓。有两种模式:

  • CV_RETR_EXTERNAL: 仅检索外部轮廓
  • CV_RETR_LIST: 检索所有轮廓,无论它们是内部还是外部

轮廓近似方法指定如何近似轮廓。有两种方法:

  • CV_CHAIN_APPROX_NONE: 不近似轮廓
  • CV_CHAIN_APPROX_SIMPLE: 近似轮廓,仅保留拐点

获取边界框

一旦找到了轮廓,就可以使用 cv2.boundingRect 函数获取其边界框。此函数返回一个矩形,包含轮廓的最小外接矩形。

示例代码

以下示例代码演示了如何使用 OpenCV 查找轮廓和获取其边界框:

import cv2

# 读入图像
image = cv2.imread("image.jpg")

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

# 二值化图像
thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)[1]

# 查找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 获取边界框
for contour in contours:
    x, y, w, h = cv2.boundingRect(contour)
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

# 显示图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

结论

在本文中,我们讨论了如何使用 OpenCV 查找轮廓并获取其边界框。我们提供了示例代码来演示这一过程。通过遵循本文中的步骤,您可以轻松地在图像中查找和提取轮廓。