OpenCV 检测矩形
Ammar Ali
2024年2月15日
本教程将讨论在 Python 中使用 OpenCV 的 findContours()
和 contourArea()
函数检测矩形。
在 Python 中使用 OpenCV 的 findContours()
和 contourArea()
函数检测图像中的矩形
我们可以使用 OpenCV 的 findContours()
函数检测图像中存在的矩形,我们可以使用 contourArea()
函数根据其面积对不同的矩形进行排序。
我们可以使用 OpenCV 的 findContours()
函数找到给定图像的轮廓,但我们必须在 findContours()
函数中使用二进制或黑白图像。
要将给定的图像转换为二进制,我们必须使用 OpenCV 的 cvtColor()
和 threshold()
函数。cvtColor()
函数用于将一种颜色空间转换为另一种颜色空间,我们将使用它来将 BGR 图像转换为灰度。
threshold()
函数将灰度图像转换为只有两个值的二进制图像,0 和 255。请参见下面的代码。
import cv2
import numpy as np
img = cv2.imread("rectangle.jpg")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh_img = cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
cnts = cv2.findContours(thresh_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for cnt in cnts:
approx = cv2.contourArea(cnt)
print(approx)
cv2.imshow("image", img)
cv2.imshow("Binary", thresh_img)
cv2.waitKey()
输出:
45000.0
23000.0
40000.0
如输出所示,每个矩形的面积都显示出来了,而且所有的面积都不一样。使用这些区域,我们可以对矩形进行排序,就像我们可以给它们不同的颜色或将每个矩形保存到不同的图像文件中或在它们上放置一些文本等。
二进制图像中的形状应为白色,背景应为黑色。
如图所示,输出图像中形状的颜色与原始图像中形状的颜色不同。findContours()
函数的第一个参数是二值图像,第二个参数是轮廓检索方法。
我们使用 cv2.RETR_EXTERNAL
,因为我们只需要外部轮廓。第三个参数是用于查找轮廓的近似方法。
作者: Ammar Ali