如何使用OpenCV Python在图像中检测三角形?

如何使用OpenCV Python在图像中检测三角形?

要在图像中检测三角形,我们首先要检测图像中的所有轮廓。然后我们循环处理所有的轮廓,找到每个轮廓的近似轮廓。如果近似轮廓中的顶点点数为3,则将轮廓涂上颜色,并标记为三角形。请参见下面的伪代码。

for cnt in contours:
   approx = cv2.approxPolyDP()
   if len(approx) == 3:
      cv2.drawContours()
      cv2.putText("Triangle")

步骤

您可以使用以下步骤来检测输入图像中的三角形−

导入所需的库。在以下所有Python示例中,所需的Python库为 OpenCV 。请确保您已经安装了它。

import cv2

使用 cv2.imread() 读取输入图像,并将其转换为灰度图像。

img = cv2.imread('approx1.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

在灰度图像上应用阈值处理以创建二进制图像。调整第二个参数以获得更好的轮廓检测。

ret,thresh = cv2.threshold(gray,50,255,0)

使用 cv2.findContours() 函数在图像中找到轮廓。

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

从轮廓列表中选择一个轮廓(比如第一个轮廓)cnt,或循环处理所有的轮廓。

使用 cv2.approxPolyDP() 函数计算每个轮廓 cnt 的近似轮廓点。

approx = cv2.approxPolyDP(cnt,epsilon,True)

如果近似轮廓中的顶点点数是3,则在图像上绘制该轮廓,并将其设置为三角形。

显示具有绘制轮廓和近似轮廓的图像。

cv2.imshow("Shapes", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

让我们来看几个例子以更好地理解。

例1

在下面的Python代码中,我们检测输入图像中的三角形。

# 导入所需的库
import cv2

# 读取输入图像
img = cv2.imread('shapes.jpg')

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

# 应用二值化将灰度图像转换为二进制图像
ret,thresh = cv2.threshold(gray,50,255,0)

# 找到轮廓
contours,hierarchy = cv2.findContours(thresh, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
print("检测到的轮廓数量:",len(contours))

for cnt in contours:
   approx = cv2.approxPolyDP(cnt, 0.01*cv2.arcLength(cnt, True), True)
   if len(approx) == 3:
      img = cv2.drawContours(img, [cnt], -1, (0,255,255), 3)

      # 计算三角形质心
      M = cv2.moments(cnt)
      if M['m00'] != 0.0:
         x = int(M['m10']/M['m00'])
         y = int(M['m01']/M['m00'])
      cv2.putText(img, 'Triangle', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 0), 2)

cv2.imshow("Shapes", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我们将使用以下图像作为 输入文件 在上述程序代码中−

如何使用OpenCV Python在图像中检测三角形?

输出

当您执行上述代码时,它将在控制台上产生以下 输出

检测到的轮廓数量:4

并且我们得到以下窗口,显示了 输出

如何使用OpenCV Python在图像中检测三角形?

在上述输出图像中,检测出一个三角形。

示例2

在此示例中,我们将展示如何在图像中检测多个三角形。

import cv2
import numpy as np

img = cv2.imread('shapes1.jpg')
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret,thresh = cv2.threshold(img1,150,255,0)
contours,hierarchy = cv2.findContours(thresh, 1, 2)
print("检测到的轮廓数量:",len(contours))

for cnt in contours:
   approx = cv2.approxPolyDP(cnt, 0.1*cv2.arcLength(cnt, True), True)
   if len(approx) == 3:
      img = cv2.drawContours(img, [cnt], -1, (0,255,255), 3)
      M = cv2.moments(cnt)
      if M['m00'] != 0.0:
      x = int(M['m10']/M['m00'])
      y = int(M['m01']/M['m00'])
   cv2.putText(img, '三角形', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 0), 2)

cv2.imshow("Triangles", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我们得到以下窗口,显示输出−

如何使用OpenCV Python在图像中检测三角形?

在上述输出图像中,我们检测到了四个三角形。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV