如何使用OpenCV Python计算图像轮廓的面积和周长? 您所在的位置:网站首页 python计算圆的周长和面积代码 如何使用OpenCV Python计算图像轮廓的面积和周长?

如何使用OpenCV Python计算图像轮廓的面积和周长?

2024-05-01 09:12| 来源: 网络整理| 查看: 265

如何使用OpenCV Python计算图像轮廓的面积和周长?

图像中物体的轮廓对于计算图像的面积和周长非常有帮助。图像的轮廓是连接沿边界的所有连续点的曲线,具有相同的颜色或强度。轮廓用于形状分析和对象检测和识别等。

要计算对象的面积和周长,我们首先检测对象的轮廓,然后分别应用 cv2.contourArea() 和 cv2.arcLength() 函数。

语法

以下语法用于函数−

area = cv2.contourArea(cnt) perimeter = cv2.arcLength(cnt, True)

其中,“ cnt ”是图像中对象的轮廓点的numpy数组。

步骤

可以使用以下步骤来计算图像轮廓的面积和周长:

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

import cv2

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

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

对灰度图像进行阈值处理以创建二进制图像。

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

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

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

使用 cv2.contourArea(cnt) 和 cv2.arcLength(cnt, True) 函数计算图像中检测到的轮廓的面积和周长。

area = cv2.contourArea(cnt) perimeter = cv2.arcLength(cnt, True)

在输入图像上绘制轮廓。

cv2.drawContours(img, [cnt], -1, (0,255,255), 3)

打印图像中检测到的轮廓的面积和周长。

print('Area:', area) print('Perimeter:', perimeter)

我们来看一些例子以更好地理解。

示例1

在此程序中,我们计算输入图像“ pentagon.png ”中检测到的轮廓的面积和周长。

import cv2 # Read the input image img = cv2.imread('shapes.jpg') # convert the image to grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Apply thresholding in the gray image to create a binary image ret,thresh = cv2.threshold(gray,127,255,0) # Find the contours using binary image contours,hierarchy = cv2.findContours(thresh, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) print("Number of contours in image:",len(contours)) # compute the area and perimeter for each contour for cnt in contours: area = cv2.contourArea(cnt) perimeter = cv2.arcLength(cnt, True) perimeter = round(perimeter, 4) print('Area:', area) print('Perimeter:', perimeter) img1 = cv2.drawContours(img, [cnt], -1, (0,255,0), 3) x1, y1 = cnt[0,0] cv2.putText(img1, f'Area:{area}', (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2) cv2.putText(img1, f'Perimeter:{perimeter}', (x1, y1+20), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2) cv2.imshow("Image", img) cv2.waitKey(0) cv2.destroyAllWindows() 应用结果

运行以上代码可获得以下结果 –

Number of contours in image: 4 Area: 7189.0 Perimeter: 324.2467 Area: 9501.0 Perimeter: 366.6823 Area: 31262.5 Perimeter: 707.404 Area: 48453.0 Perimeter: 1053.6222

我们可以看到窗口显示了所有检测到的轮廓,并在每个轮廓周围添加了对区域和周长的标签。

import cv2 import numpy as np img1 = cv2.imread('shapes.jpg') img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(img,10,255,0) contours,hierarchy = cv2.findContours(thresh, 1, 2) print("图像中的轮廓数量:",len(contours)) for i, cnt in enumerate(contours): M = cv2.moments(cnt) if M['m00'] != 0.0: x1 = int(M['m10']/M['m00']) y1 = int(M['m01']/M['m00']) area = cv2.contourArea(cnt) perimeter = cv2.arcLength(cnt, True) perimeter = round(perimeter, 4) print(f'轮廓{i+1}的面积:, area) print(f'轮廓{i+1}的周长:, perimeter) img1 = cv2.drawContours(img1, [cnt], -1, (0,255,255), 3) cv2.putText(img1, f'面积 :{area}', (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有