如何使用OpenCV Python在图像中检测多边形?


我们首先检测图像中所有物体的轮廓以检测多边形。然后循环遍历所有轮廓。找到每个轮廓的近似轮廓。如果近似轮廓中的顶点数量为5个或更多,则绘制轮廓并将其设置为三角形。请参见下面的伪代码。

for cnt in contours:
   approx = cv2.approxPolyDP()
   if len(approx) >= 5:
      cv2.drawContours()
      cv2.putText("Polygon")

步骤

我们可以使用以下步骤在图像中检测多边形:

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

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

  • 在灰度图像上应用阈值cv2.threshold()以创建二值图像。调整第二个参数以获得更好的轮廓检测。

  • 使用cv2.findContours()函数查找图像中的轮廓。

  • 从轮廓列表中选择一个轮廓(例如第一个轮廓)cnt。或者循环遍历所有检测到的轮廓。

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

  • 如果近似轮廓approx中的顶点总数为5个或更多,则在图像上绘制近似轮廓并将其设置为多边形。

  • 显示绘制了轮廓和近似轮廓的图像。

让我们来看下面的示例以便更好地理解。

示例

在这个Python程序中,我们检测输入图像中的多边形。我们还绘制了检测到的多边形的轮廓。

# import required libraries import cv2 # read the input image img = cv2.imread('polygons.png') # convert the image to grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # apply thresholding to convert the grayscale image to a binary image ret,thresh = cv2.threshold(gray,50,255,0) # find the contours contours,hierarchy = cv2.findContours(thresh, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) print("Number of contours detected:",len(contours)) for cnt in contours: approx = cv2.approxPolyDP(cnt, 0.01*cv2.arcLength(cnt, True), True) (x,y)=cnt[0,0] if len(approx) >= 5: img = cv2.drawContours(img, [approx], -1, (0,255,255), 3) cv2.putText(img, 'Polygon', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 0), 2) cv2.imshow("Polygon", img) cv2.waitKey(0) cv2.destroyAllWindows()

我们将使用以下图像作为此程序的输入文件


运行上述Python程序后,它将生成以下输出窗口:

Number of contours detected: 3

我们将得到以下输出窗口:


更新于:2022年12月5日

5K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告