`
huangyongxing310
  • 浏览: 496287 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

opencv 轮廓特征

 
阅读更多
# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
from PIL import ImageFilter
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
from PIL import Image

import cv2


def main():
    # 计算物体的周长、面积、质心、最小外接矩形等
    # OpenCV函数:cv2.contourArea(), cv2.arcLength(), cv2.approxPolyDP()
    # 等
    # =================================寻找轮廓
    img = cv2.imread('handwriting2.jpg', 0)
    _, thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    image, contours, hierarchy = cv2.findContours(thresh, 3, 2)
    # 以数字3的轮廓为例
    cnt = contours[0]

    # =================================轮廓面积
    area = cv2.contourArea(cnt)  # 4386.5
    print("area == " , area)

    # =================================轮廓周长
    perimeter = cv2.arcLength(cnt, True)  # 585.7
    # 参数2表示轮廓是否封闭,显然我们的轮廓是封闭的,所以是True
    print("perimeter == ", perimeter)

    # =================================外接矩形
    # 形状的外接矩形有两种,如下图,绿色的叫外接矩形,表示不考虑旋转并且能包含整个轮廓的矩形。
    x, y, w, h = cv2.boundingRect(cnt)  # 外接矩形
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    # =================================# 最小外接矩形
    rect = cv2.minAreaRect(cnt)  # 最小外接矩形
    print(rect)

    box = np.int0(cv2.boxPoints(rect))  # 矩形的四个角点取整
    cv2.drawContours(img, [box], 0, (255, 0, 0), 2)

    # =================================最小外接圆
    (x, y), radius = cv2.minEnclosingCircle(cnt)
    (x, y, radius) = np.int0((x, y, radius))  # 圆心和半径取整
    cv2.circle(img, (x, y), radius, (0, 0, 255), 2)

    # =================================拟合椭圆
    ellipse = cv2.fitEllipse(cnt)
    cv2.ellipse(img, ellipse, (255, 255, 0), 2)

    # =================================形状匹配
    img2 = cv2.imread('shapes.jpg', 0)
    _, thresh = cv2.threshold(img2, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    image, contours, hierarchy = cv2.findContours(thresh, 3, 2)
    img_color = cv2.cvtColor(thresh, cv2.COLOR_GRAY2BGR)  # 用于绘制的彩色图

    cnt_a, cnt_b, cnt_c = contours[0], contours[1], contours[2]
    print(cv2.matchShapes(cnt_b, cnt_b, 1, 0.0))  # 0.0
    print(cv2.matchShapes(cnt_b, cnt_c, 1, 0.0))  # 2.17e-05
    print(cv2.matchShapes(cnt_b, cnt_a, 1, 0.0))  # 0.418
    # matchShapes(contour1, contour2, method, parameter)
    # 参数3是匹配方法,详情可参考:ShapeMatchModes,参数4是OpenCV的预留参数,暂时没有实现,
    # 形状匹配是通过图像的Hu矩来实现的(cv2.HuMoments()),大家如果感兴趣,

    # # cv2.imshow('thresh', thresh)
    # # cv2.imshow('edges', edges)
    cv2.imshow('img', img)
    cv2.imshow('img2', img2)
    cv2.waitKey(0)


if __name__ == '__main__':
    main()
分享到:
评论

相关推荐

    opencv 轮廓的提取多种方法

    这种方法适用于具有明显几何特征的轮廓提取。 3. **GrabCut算法** GrabCut算法是一种交互式分割方法,用户可以指定初始的前景和背景区域,然后算法会迭代优化分割结果。`cv2.grabCut()`函数实现了这一过程。对于...

    opencv放缩轮廓

    使用opencv自带的resize函数放缩会使轮廓点丢失或变暗,本代码可以实现轮廓形状不变放缩

    OpenCV轮廓提取的源代码

    ### OpenCV轮廓提取详解 #### 一、OpenCV轮廓提取概述 在计算机视觉领域,轮廓检测是图像处理中的一项重要技术。它可以帮助我们从复杂的图像背景中分离出目标物体,从而便于进一步分析与识别。OpenCV(开源计算机...

    OpenCV笔记: 查找轮廓

    这篇“OpenCV笔记:查找轮廓”可能是关于如何在OpenCV中提取图像中的轮廓,这对于物体识别、形状检测等任务至关重要。 在OpenCV中,查找轮廓涉及以下几个关键步骤: 1. **读取图像**:首先,我们需要使用`imread`...

    opencv轮廓(contour)检测

    本篇文章将深入探讨OpenCV中的轮廓检测,以及如何使用`cvFindContours`函数进行实践操作。 轮廓是图像中边界或边缘的表示,它们对于对象识别、分割和形状分析至关重要。OpenCV库提供了一套完整的函数来检测和处理...

    基于OpenCV的图像轮廓提取实现

    OpenCV(开源计算机视觉库)提供了一整套强大的工具,使得开发者能够方便地进行图像轮廓的检测与分析。本教程将深入探讨如何基于OpenCV实现图像轮廓的提取,并通过动态调整参数来实时查看提取效果。 首先,我们要...

    Opencv中查找轮廓,并用直线拟合,检测每个轮廓的线性程度

    代码中利用canny边缘检测绘制并取得工程目录图片下的轮廓,对每个轮廓用直线进行拟合,计算每个轮廓中点到拟合直线的距离。以此来判断一个轮廓的线性程度。包括了霍夫变换检测图像中的直线和累计概率霍夫变换检测...

    QT+opencv边缘检测,轮廓提取及轮廓跟踪

    在本文中,我们将深入探讨如何在QT5.8环境下结合OpenCV3.2库实现图像处理中的关键步骤:边缘检测、轮廓提取以及轮廓跟踪。这些技术在计算机视觉、机器学习和自动化领域中扮演着重要角色。 首先,让我们来了解边缘...

    opencv字符轮廓分割

    OpenCV提供了丰富的函数和模块,用于图像处理,包括图像读取、显示、转换、滤波以及特征检测等。在这个任务中,我们主要关注的是图像的边缘检测和轮廓提取。 边缘检测是找到图像中亮度变化显著的点的过程,这在查找...

    opencv轮廓的简单应用

    opencv轮廓的简单应用: 相关函数如下: cvFindContours,cvThreshold,cvContourArea,cvArcLength,cvBoundingRect,cvMinAreaRect2,cvBoxPoints,cvMinEnclosingCircle,cvDrawContours。 1.查找轮廓 2.按地址...

    opencv轮廓提取示例

    本示例聚焦于“opencv轮廓提取”,这是一个关键的操作,它允许我们识别图像中的对象或区域。下面我们将深入探讨OpenCV如何实现轮廓提取,以及如何通过参数设定选择提取轮廓的外边缘和内边缘。 首先,我们要理解什么...

    基于opencv轮廓提取函数

    这是一个基于opencv的图像轮廓提取程序,可以识别轮廓边沿,是初级学者的参考代码

    OpenCV轮廓操作

    本程序是基于OpenCV的轮廓操作,包括 (1)一次提取所有轮廓并绘图显示 (2)逐点画出最外层轮廓 (3)逐个画出所有轮廓 注释详细,保证让初学者弄懂轮廓

    基于OpenCV的车辆轮廓检测

    ### 基于OpenCV的车辆轮廓检测 #### 摘要 本文介绍了一种新型的基于开源计算机视觉库OpenCV的车辆轮廓检测方法。针对传统汽车尺寸参数测量手段相对落后的现状,本文提出了一种结合图像处理技术和计算机视觉算法的...

    OpenCV根据矩形轮廓进行倾斜校正

    这可以通过计算轮廓的周长、面积、角点数量等特征来完成。 3. **矩形检测**:通过`minAreaRect()`函数来检测出最接近理想矩形的轮廓,该函数会返回一个旋转矩形,包含角度、宽度和高度信息。 4. **旋转校正**:...

    基于OPENCV的多种特征提取总结

    ### 基于OpenCV的多种特征提取技术详解 #### 一、颜色特征提取与颜色直方图构建 颜色特征是计算机视觉中最基本且重要的特征之一。颜色直方图能够很好地表示图像中颜色的分布情况,是进行图像检索、目标识别等任务...

    opencv绘制轮廓

    "opencv绘制轮廓"这个主题涉及到的是如何使用OpenCV来识别并可视化图像中的对象边界,也就是轮廓。轮廓提取是图像分割的重要步骤,常用于物体识别、形状分析以及图像处理的其他应用。 首先,我们要理解OpenCV中的...

    opencv 轮廓检测

    OpenCV(开源计算机视觉库)是一个强大的图像处理和计算机视觉工具包,被广泛应用于各种领域,包括轮廓检测。在这个项目中,我们将在VC6.0环境下利用OpenCV来实现轮廓的检测。首先,我们需要理解轮廓检测的基本原理...

    opencv轮廓图像提取显示

    opencv+vs2005 图像处理的轮廓提取显示

    opencv提取图片中人轮廓

    从静态的视频帧中获取的人物图片先二值化,再利用开操作闭操作以及轮廓填充,获取人物轮廓

Global site tag (gtag.js) - Google Analytics