0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV中几何形状识别与测量

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2022-06-02 15:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

OpenCV中几何形状识别与测量

经常看到有学习OpenCV不久的人提问,如何识别一些简单的几何形状与它们的颜色,其实通过OpenCV的轮廓发现与几何分析相关的函数,只需不到100行的代码就可以很好的实现这些简单几何形状识别与对象测量相关操作。本文就会演示给大家如何通过OpenCV 轮廓发现与几何分析相关函数实现如下功能:

几何形状识别(识别三角形、四边形/矩形、多边形、圆)

计算几何形状面积与周长、中心位置

提取几何形状的颜色

在具体代码实现与程序演示之前,我们先要搞清楚一些概念。

一:基本概念与函数介绍

1. 轮廓(contours)

什么是轮廓,简单说轮廓就是一些列点相连组成形状、它们拥有同样的颜色、轮廓发现在图像的对象分析、对象检测等方面是非常有用的工具,在OpenCV中使用轮廓发现相关函数时候要求输入图像是二值图像,这样便于轮廓提取、边缘提取等操作。轮廓发现的函数与参数解释如下:

findContours(image, mode, method, contours=None, hierarchy=None, offset=None)

- image输入/输出的二值图像

- mode 返回轮廓的结构、可以是List、Tree、External

- method 轮廓点的编码方式,基本是基于链式编码

- contours 返回的轮廓集合

- hieracrchy 返回的轮廓层次关系

- offset 点是否有位移

2. 多边形逼近

多边形逼近,是通过对轮廓外形无限逼近,删除非关键点、得到轮廓的关键点,不断逼近轮廓真实形状的方法,OpenCV中多边形逼近的函数与参数解释如下:

approxPolyDP(curve, epsilon, closed, approxCurve=None)

- curve 表示输入的轮廓点集合

- epsilon 表示逼近曲率,越小表示相似逼近越厉害

- close 是否闭合

3. 几何距计算

图像几何距是图像的几何特征,高阶几何距中心化之后具有特征不变性,可以产生Hu距输出,用于形状匹配等操作,这里我们通过计算一阶几何距得到指定轮廓的中心位置,计算几何距的函数与参数解释如下:

moments(array, binaryImage=None)

- array表示指定输入轮廓

- binaryImage默认为None

二:代码实现与演示

基于轮廓发现与多边形逼近、几何距实现几何形状识别与对象测量,测量时候还用到另外两个相关API分别是计算轮廓的周长与面积。具体用法在代码中体现。整个代码实现分为如下几步完成:1.图像二值化

# 二值化图像

print("start to detect lines... ")

gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)

ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)

cv.imshow("input image", frame)

2.轮廓发现

out_binary, contours, hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

for cnt in range(len(contours)):

# 提取与绘制轮廓

cv.drawContours(result, contours, cnt, (0, 255, 0), 2)

3.几何形状识别

# 轮廓逼近

epsilon = 0.01 * cv.arcLength(contours[cnt], True)

approx = cv.approxPolyDP(contours[cnt], epsilon, True)

# 分析几何形状

corners = len(approx)

shape_type = ""

if corners == 3:

count = self.shapes['triangle']

count = count+1

self.shapes['triangle'] = count

shape_type = "三角形"

if corners == 4:

count = self.shapes['rectangle']

count = count + 1

self.shapes['rectangle'] = count

shape_type = "矩形"

if corners >= 10:

count = self.shapes['circles']

count = count + 1

self.shapes['circles'] = count

shape_type = "圆形"

if 4 < corners < 10:

count = self.shapes['polygons']

count = count + 1

self.shapes['polygons'] = count

shape_type = "多边形"

4.测量周长、面积、计算中心

# 求解中心位置

mm = cv.moments(contours[cnt])

cx = int(mm['m10'] / mm['m00'])

cy = int(mm['m01'] / mm['m00'])

cv.circle(result, (cx, cy), 3, (0, 0, 255), -1)

# 计算面积与周长

p = cv.arcLength(contours[cnt], True)

area = cv.contourArea(contours[cnt])

5.颜色提取

# 颜色分析

color = frame[cy][cx]

color_str = "(" + str(color[0]) + ", " + str(color[1]) + ", " + str(color[2]) + ")"

运行显示原图如下:

a8ed07b0-e191-11ec-ba43-dac502259ad0.png

分析结果:

a923e762-e191-11ec-ba43-dac502259ad0.png

控制台输出:

a9471d18-e191-11ec-ba43-dac502259ad0.png

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 几何
    +关注

    关注

    0

    文章

    37

    浏览量

    12624
  • 测量
    +关注

    关注

    10

    文章

    5510

    浏览量

    116075
  • OpenCV
    +关注

    关注

    33

    文章

    651

    浏览量

    44395

原文标题:OpenCV中几何形状识别与测量

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    多种类几何尺寸集成智能仪器定制 一站式解决产线多维度测量需求

    关键词:几何尺寸测量仪,智能仪器,定制仪器,测宽测厚仪,测宽测长仪,直线度外径测量仪 在现代化生产线上,几何尺寸测量是保障产品精度、控制生产
    发表于 10-09 13:50

    零成本钢铁侠手套!树莓派+OpenCV 秒变手势遥控器!

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与OpenCV实现面部和运动追踪的云台系统使用树莓派和OpenCV实现手部
    的头像 发表于 08-16 16:16 882次阅读
    零成本钢铁侠手套!树莓派+<b class='flag-5'>OpenCV</b> 秒变手势遥控器!

    如何使用树莓派与OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与OpenCV实现面部和运动追踪的云台系统使用树莓派和OpenCV实现手部
    的头像 发表于 08-14 17:45 954次阅读
    如何使用树莓派与<b class='flag-5'>OpenCV</b>实现面部和运动追踪的云台系统?

    如何使用树莓派+OpenCV实现姿态估计和面部特征点追踪?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与OpenCV实现面部和运动追踪的云台系统使用树莓派和OpenCV实现手部
    的头像 发表于 08-13 17:44 965次阅读
    如何使用树莓派+<b class='flag-5'>OpenCV</b>实现姿态估计和面部特征点追踪?

    用树莓派 + OpenCV 打造人脸识别技术!

    在本指南中,我们将教您如何使用OpenCV和面部识别库(两个出色的开源项目)设置树莓派来检测和识别面部。在这个设置,所有的数据和处理都将在Pi上本地执行,这意味着您的所有面部和数据都
    的头像 发表于 07-29 17:27 998次阅读
    用树莓派 + <b class='flag-5'>OpenCV</b> 打造人脸<b class='flag-5'>识别</b>技术!

    三坐标微米级测量精度,高精度检测液压支架导向套的几何公差尺寸

    Mars Classic 10158 三坐标测量机可以测量各种复杂几何特征,满足客户对阀体全尺寸检测的需求;能实现微米级的高精度测量,满足导向套关键尺寸的高精度检测需求;自动
    的头像 发表于 07-10 13:33 512次阅读
    三坐标微米级<b class='flag-5'>测量</b>精度,高精度检测液压支架导向套的<b class='flag-5'>几何</b>公差尺寸

    基于LockAI视觉识别模块:手写数字识别

    (input_mat); 作用:PaddleClas类的一个函数,用于实现手写数字识别。 参数说明: input_mat:要识别的图像。 返回值: 返回一个包含手写数字分类结果的对象。该
    发表于 06-30 16:45

    wafer晶圆几何形貌测量系统:厚度(THK)翘曲度(Warp)弯曲度(Bow)等数据测量

    在先进制程,厚度(THK)翘曲度(Warp)弯曲度(Bow)三者共同决定了晶圆的几何完整性,是良率提升和成本控制的核心参数。通过WD4000晶圆几何形貌测量系统在线检测,可减少其对芯
    发表于 05-28 11:28 2次下载

    wafer晶圆几何形貌测量系统:厚度(THK)翘曲度(Warp)弯曲度(Bow)等数据测量

    在先进制程,厚度(THK)翘曲度(Warp)弯曲度(Bow)三者共同决定了晶圆的几何完整性,是良率提升和成本控制的核心参数。通过WD4000晶圆几何形貌测量系统在线检测,可减少其对芯
    的头像 发表于 05-23 14:27 1054次阅读
    wafer晶圆<b class='flag-5'>几何</b>形貌<b class='flag-5'>测量</b>系统:厚度(THK)翘曲度(Warp)弯曲度(Bow)等数据<b class='flag-5'>测量</b>

    PanDao:输入形状精度参数

    手工抛光制作测试板(T)进行面形偏差测量的传统技术(该检测装置也见于斐索干涉仪)。 被测表面(S)的面形误差(表面高度H)是通过将表面的形状与测试板(T)的标准形状(通常精度<1/
    发表于 05-06 08:45

    CMM三坐标测量机能测量的数据

    CMM三坐标测量机能够测量的数据非常广泛,包括但不限于:几何元素数据:如点、线、面、圆、球、圆柱、圆锥等几何元素的尺寸和形状数据。这些数据可
    的头像 发表于 03-21 18:49 962次阅读
    CMM三坐标<b class='flag-5'>测量</b>机能<b class='flag-5'>测量</b>的数据

    精密几何测量技术在电子芯片制造的重要性

    精密几何测量技术在电子芯片制造具有极其重要的地位,主要体现在以下几个方面:1、确保芯片性能-晶体管性能优化:在芯片中,晶体管的尺寸和结构对其性能至关重要。通过精密几何
    的头像 发表于 02-28 14:23 767次阅读
    精密<b class='flag-5'>几何</b><b class='flag-5'>测量</b>技术在电子芯片制造<b class='flag-5'>中</b>的重要性

    三坐标测量机的工作原理 三坐标测量机在质量控制的应用

    利用三个相互垂直的轴(通常是X、Y、Z轴)来确定空间中任意点坐标的测量设备。其工作原理基于笛卡尔坐标系,通过测量探头在三个轴上的移动来确定被测物体的几何尺寸和形状
    的头像 发表于 12-19 10:08 1846次阅读

    如何用OpenCV进行手势识别--基于米尔全志T527开发板

    本文将介绍基于米尔电子MYD-LT527开发板(米尔基于全志T527开发板)的OpenCV手势识别方案测试。摘自优秀创作者-小火苗米尔基于全志T527开发板一、软件环境安装1.安装OpenCVsudoapt-getinstalllibopencv-devpython3-
    的头像 发表于 12-13 08:04 1760次阅读
    如何用<b class='flag-5'>OpenCV</b>进行手势<b class='flag-5'>识别</b>--基于米尔全志T527开发板

    【AI实战项目】基于OpenCV的“颜色识别项目”完整操作过程

    适用于哪些场景,然后通过Python编写代码来实现这些算法,并应用于实际项目中,实现图像的检测、识别、分类、定位、测量等目标。华清远见【python+OpenCV
    的头像 发表于 12-09 16:42 1891次阅读
    【AI实战项目】基于<b class='flag-5'>OpenCV</b>的“颜色<b class='flag-5'>识别</b>项目”完整操作过程