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

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

在数字图像处理中,轮廓是指将一幅图像中所有的连续的边缘线提取出来,这些边缘线组成的曲线即为轮廓。通过计算图像轮廓的面积和周长,我们可以进一步分析图像内容,对图像进行处理,实现图像的特定功能。OpenCV是一种常用的数字图像处理库,通过Python语言穿件OpenCV应用程序,可以方便快捷地实现对图像轮廓的面积和周长的计算。

准备工作

在进行图像处理前,我们需要先安装Operating System (OS) 和OpenCV库。这里我们以Ubuntu环境下Python编程为例介绍,首先在终端中输入以下命令安装操作系统,以及OpenCV库:

sudo su
apt-get update
apt-get upgrade
apt-get install python-dev python-pip python-opencv -y

接下来,我们需要准备一张图片。比如我们准备了一张名为
“`image.jpg“`的图片,该图片可以是从网络上下载的,也可以是自己拍摄的。为了方便操作,在“`image.jpg“`图片所在目录中创建Python代码文件“`image_main.py“`。

代码实现

在准备工作完毕后,我们可以开始编写OpenCV Python代码进行图像轮廓的面积和周长的计算。首先,我们需要导入需要使用的Python包,包括
“`cv2“`、“`numpy“`和“`matplotlib“`等包。具体的代码如下:

import cv2
import numpy as np
from matplotlib import pyplot as plt

接着,我们需要读取图像文件并显示图像。然后,将图像转换为灰度图像并使用Canny算法进行边缘检测。视频中的边缘检测算法为Canny算法,它是一种基于梯度的算法,能够更加精准地检测图像中的边缘。具体的代码如下:

# 读取图像文件,显示图像
img = cv2.imread('image.jpg',0)
plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.show()

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

#边缘检测Canny
edges = cv2.Canny(img,100,200)
cv2.imshow('edges',edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

接下来,我们使用
“`cv2.findContours()“`函数来查找图像中的轮廓,同时计算出图像的面积和周长。“`cv2.findContours()“`函数是OpenCV库中用于寻找轮廓的函数,它需要输入一张黑白图像,并返回两个参数:图像中的轮廓和轮廓周长。具体的代码如下:

# 查找轮廓,并计算出图像的面积和周长
contours, hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
area = cv2.contourArea(cnt)
perimeter = cv2.arcLength(cnt,True)
print("面积: %d 像素,周长: %d 像素." % (area, perimeter))

“`cv2.contourArea(cnt)“`计算轮廓面积的函数,其参数是包含轮廓信息的数组“`cnt“`。“`cv2.arcLength(cnt,True)“`计算轮廓周长的函数,其参数是轮廓的坐标数组“`cnt“`以及是否封闭的标志。最后,我们可以使用“`plt.show()“`函数将原始图像和检测到的边缘展示出来,检查结果是否正确。具体的代码如下:

# 将结果展示出来
img_contour = img.copy()
cv2.drawContours(img_contour, contours, -1, (0,255,0), 3)
plt.imshow(img_contour,cmap = 'gray')
plt.title('Contour Image'), plt.xticks([]), plt.yticks([])
plt.show()

最终的代码如下所示:

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 读取图像文件,显示图像
img = cv2.imread('image.jpg')
plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.show()

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

# 边缘检测Canny
edges = cv2.Canny(img,100,200)
cv2.imshow('edges',edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 查找轮廓,并计算出图像的面积和周长
contours, hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
area = cv2.contourArea(cnt)
perimeter = cv2.arcLength(cnt,True)
print("面积: %d 像素,周长: %d 像素." % (area, perimeter))

# 将结果展示出来
img_contour = img.copy()
cv2.drawContours(img_contour, contours, -1, (0,255,0), 3)
plt.imshow(img_contour,cmap = 'gray')
plt.title('Contour Image'), plt.xticks([]), plt.yticks([])
plt.show()

结论

本文通过一个示例代码介绍了如何使用OpenCV Python计算图像轮廓的面积和周长。通过以上步骤,我们可以更加深入地理解图像处理的相关技术,并在实际应用中加以运用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Python OpenCV