OpenCV计算轮廓长度/周长和面积

首先,计算轮廓长度/周长和面积需要使用到OpenCV库中的cv2.contourArea()和cv2.arcLength()函数。在计算前需要先检测出轮廓。

以下是计算轮廓长度/周长和面积的详细攻略:

1. 导入库

import cv2
import numpy as np

2. 读取并预处理图像

image = cv2.imread('test.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

3. 边缘检测

edged_image = cv2.Canny(gray_image, 30, 200)

4. 寻找轮廓

contours, _ = cv2.findContours(edged_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

5. 循环计算所有轮廓的长度/周长和面积

for contour in contours:
    perimeter = cv2.arcLength(contour, True)
    area = cv2.contourArea(contour)
    print("Perimeter: {:.2f}".format(perimeter))
    print("Area: {:.2f}".format(area))

在上述代码中,边缘检测步骤使用了Canny算子进行边缘检测,轮廓检测使用了findContours函数,其中参数RETR_EXTERNAL表示只检测外部轮廓,CHAIN_APPROX_SIMPLE表示近似检测。

接下来是两个计算轮廓长度/周长和面积的示例:

示例1:计算单个轮廓的长度/周长和面积

image = cv2.imread('test.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edged_image = cv2.Canny(gray_image, 30, 200)

contours, _ = cv2.findContours(edged_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

perimeter = cv2.arcLength(contours[0], True)
area = cv2.contourArea(contours[0])

print("Perimeter: {:.2f}".format(perimeter))
print("Area: {:.2f}".format(area))

在该示例中,首先读取与预处理图像,然后使用Canny算子进行边缘检测,使用findContours检测轮廓。

计算单个轮廓的长度/周长和面积时,只需使用第一个轮廓,使用cv2.arcLength()和cv2.contourArea()分别计算出轮廓的长度/周长和面积。

示例2:计算多个轮廓的长度/周长和面积并标注出来

image = cv2.imread('test.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edged_image = cv2.Canny(gray_image, 30, 200)

contours, _ = cv2.findContours(edged_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 计算所有轮廓的长度/周长和面积
for i in range(len(contours)):
    perimeter = cv2.arcLength(contours[i], True)
    area = cv2.contourArea(contours[i])
    print("Perimeter: {:.2f}".format(perimeter))
    print("Area: {:.2f}".format(area))

    # 将轮廓画在图像上
    cv2.drawContours(image, [contours[i]], -1, (0, 0, 255), 2)

# 显示结果
cv2.imshow("Image", image)
cv2.waitKey(0)

在该示例中,同样先读取与预处理图像,然后使用Canny算子进行边缘检测,使用findContours检测轮廓。

对于多个轮廓的计算方法与示例1类似,不同之处在于需要使用循环计算每个轮廓的长度/周长和面积,并将其画在图像上。

最后,使用cv2.imshow()方法进行图像展示与cv2.waitKey()方法等待键盘输入。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:OpenCV计算轮廓长度/周长和面积 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • SpringCloud hystrix断路器与局部降级全面介绍

    SpringCloud Hystrix断路器与局部降级全面介绍 什么是Hystrix断路器 Hystrix是Netflix发布的一款容错框架,用于处理分布式系统的延迟和容错问题。Hystrix在整合了SpringCloud项目之后,是同步、异步请求的断路器。 断路器是对延迟和故障的容错,当请求后端服务出现链路故障、返回超时等,断路器会直接断开请求链路,避免系…

    人工智能概览 2023年5月25日
    00
  • Vue+Express实现登录注销功能的实例代码

    下面我将详细讲解 “Vue+Express实现登录注销功能的实例代码” 的完整攻略。 1. 环境准备 首先,我们需要在本地安装好以下环境: Node.js Vue.js Express MongoDB 如果你没有安装,可以先按照官方教程安装好,才能继续进行下一步。 2. 创建项目 接着,我们需要创建两个项目,一个前端项目,使用Vue.js来实现登录页面的渲染…

    人工智能概论 2023年5月25日
    00
  • python控制windows剪贴板,向剪贴板中写入图片的实例

    Python控制Windows剪贴板,向剪贴板中写入图片,可以通过下面几个步骤完成。 1. 安装必要的库 首先需要安装pywin32和Pillow两个Python库: pip install pywin32 pip install Pillow 2. 代码实现 以下是一个演示如何将一张图片复制到剪贴板的Python脚本示例: import win32clip…

    人工智能概览 2023年5月25日
    00
  • python实现mysql的读写分离及负载均衡

    下面是关于如何实现 Python 利用 MySQL 读写分离及负载均衡的攻略: 什么是读写分离及负载均衡 读写分离及负载均衡是用于处理高并发的常见方法。读写分离指的是将读操作和写操作分别放在不同的服务器上进行处理,从而分散负载并提高处理效率。而负载均衡则是将请求合理地分配到不同的服务器上,以达到分流的目的。 实现读写分离及负载均衡的步骤 建立主从复制 MyS…

    人工智能概览 2023年5月25日
    00
  • OpenCV半小时掌握基本操作之分水岭算法

    下面是详细的讲解 “OpenCV半小时掌握基本操作之分水岭算法” 的完整攻略。 一、前置知识 在学习 OpenCV 的分水岭算法之前,需要掌握以下基本知识: 图像的读取和显示。 彩色图像与灰度图像的相互转换。 图像的二值化处理。 腐蚀、膨胀、开操作和闭操作等基本形态学操作。 二、分水岭算法原理 分水岭算法是一种基于图像的分割方法,它的原理是将图像看作一个地形…

    人工智能概论 2023年5月25日
    00
  • Django-xadmin+rule对象级权限的实现方式

    下面我将为您讲解“Django-xadmin+rule对象级权限的实现方式”的完整攻略。 1. 什么是Django-xadmin xadmin是一个基于Django的后台管理系统,它提供了一系列方便的功能,可以极大地帮助我们快速地搭建后台管理系统。 2. 什么是rule对象级权限 Django中的权限和认证机制已经非常完善了,但是它只能区分用户是否有某个权限…

    人工智能概览 2023年5月25日
    00
  • Python中在for循环中嵌套使用if和else语句的技巧

    Python中的for循环结构可以嵌套if和else语句,这使得代码的灵活性增加了不少。在这里,我们将为大家详细讲解如何在Python中嵌套使用if和else语句。 为什么使用for循环中嵌套if和else语句 在处理数据集等需要遍历的数据结构时,经常需要在循环内使用if和else结构来筛选符合条件的数据。嵌套使用if和else语句可以进一步判断符合条件的数…

    人工智能概论 2023年5月25日
    00
  • Django实现后台上传并显示图片功能

    下面是实现Django后台上传并显示图片的完整攻略。 准备工作 安装Pillow:Pillow是Python Imaging Library的一个分支,用于操作图片。 pip install Pillow 修改settings.py文件,添加MEDIA_ROOT和MEDIA_URL: MEDIA_ROOT = os.path.join(BASE_DIR, ‘…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部