当前位置:   article > 正文

OpenCV识别图形以及常用函数处理_opencv 处理特性曲线

opencv 处理特性曲线

前言
识别图形
常用函数介绍

前言

OpenCV在图像处理与计算机视觉方面有很多通用算法。因此可以用来人脸识别、图形识别、文字识别等等。对于复杂一点识别的可能还涉及到大量的识别训练,最后的匹配比较分类等等。后续可能会介绍文字识别、人脸识别等等。

图形识别

图形识别指的是对常见的几何图形进行识别,它通过opencv进图形处理(二值化,图片灰度化,细化等等),获取图形轮廓特征,然后在应用几何图形特征去识别为几何图形。目前对于自己绘画几何图形并识别总的来说,如果特征找到的好,识别率还是挺高的。

  1. 直线绘画
  2. 曲线绘画

这两种划线方式对识别曲线来说,误差还是有点大,直线绘画起来没有因手抖动误差,这误差很容易影响到在图形识别处理中识别轮廓处理,从而影响到识别分类。

逻辑处理流程图

Created with Raphaël 2.2.0 开始 一张图片 读取图片 图片灰度化 图片阈值化 图片细化 图片轮廓处理 依据特征(圆度、凸包等等)确认几何图形 图形 结束

对于流程图不会的,可以借鉴这片网址与我的代码图。
参考网址:https://blog.csdn.net/cui130/article/details/84840984

st=>start: 开始
e=>end: 结束
io=>inputoutput:  一张图片
st->io
op=>operation:   读取图片
st->io->op
op1=>operation:  图片灰度化
st->io->op->op1
op2=>operation:  图片阈值化
st->io->op->op1->op2
op3=>operation: 图片细化
st->io->op->op1->op2->op3
op4=>operation:      图片轮廓处理
st->io->op->op1->op2->op3->op4
op5=>operation:    依据特征(圆度、凸包等等)确认几何图形
st->io->op->op1->op2->op3->op4->op5
io2=>inputoutput:  图形
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

常用函数介绍

  1. cvtColor(); 空间颜色转换
    void cv::cvtColor(cv::InputArray src, cv::OutputArray dst, int code,int dstCn = 0)。
    src: // 输入图
    dst: // 输出图
    code : // 颜色映射类型,可以查表得到,有很多
    dstCn: // 输出的通道数 (0=‘automatic’),我们可以使用默认值,什么都不写
    参考网址:https://blog.csdn.net/liubing8609/article/details/78461488

  2. threhold() 阈值化
    在这里插入图片描述
    src:源图像,可以为8位的灰度图,也可以为32位的彩色图像。(两者由区别)
    dst:输出图像
    thresh:阈值
    maxval:dst图像中最大值
    type:阈值类型
    参考网址:https://blog.csdn.net/u012566751/article/details/77046445

  3. canny() 边缘检测算法

网址: https://www.cnblogs.com/pacino12134/p/9877971.html

  1. absdiff()
    void cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );  
    src1  第一个原数组  
    src2  第二个原数组  
    dst  输出数组  
    函数 cvAbsDiff 计算两个数组差的绝对值

  2. approxPolyDP( 多边形逼近)
    多边形逼近:
    void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed);
    参数说明:
    InputArray curve:输入的点集
    OutputArray approxCurve:输出的点集,当前点集是能最小包容指定点集的。draw出来即是一个多边形;
    double epsilon:指定的精度,也即是原始曲线与近似曲线之间的最大距离。
    bool closed:若为true,则说明近似曲线是闭合的,它的首位都是相连,反之,若为false,则断开。

  3. findContours函数 查找轮廓
    findContours( InputOutputArray image, OutputArrayOfArrays contours,
    OutputArray hierarchy, int mode,
    int method, Point offset=Point());
    参考网址:https://blog.csdn.net/dcrmg/article/details/51987348#

  4. convexHull() 函数 针对轮廓进行凸包计算
    void convexHull(InputArray points,OutputArray hull,bool clockwise = false,bool returnPoints = true)
    参数详解:
    InputArray points: 得到的点集,一般是用图像轮廓函数求得的轮廓点
    OutputArray hull: 输出的是凸包的二维xy点的坐标值,针对每一个轮廓形成的
    bool clockwise = false: 表示凸包的方向,顺时针或者逆时针
    bool returnPoint = true: 表示返回点还是点地址的索引

  5. arcLength() 函数 图像轮廓的周长
    double arcLength(InputArray curve, bool closed)
    参数详解:
    InputArray curve:表示图像的轮廓
    bool closed:表示轮廓是否封闭的

  6. contourArea()函数 轮廓面积
    double cv::contourArea ( InputArray contour, bool oriented = false )

contour:是一个向量,二维点,可以是vector或Mat类型
oriented:有默认值false,面向区域标识符,如果为true,该函数返回一个带符号的面积,其正负取决于轮廓的方向(顺时针还是逆时针)。根据这个特性可以根据面积的符号来确定轮廓的位置。如果是默认值false,则面积以绝对值的形式返回.

  1. pointPolygonTest()
    此功能可查找图像中的点与轮廓之间的最短距离. 当点在轮廓外时返回负值,当点在内部时返回正值,如果点在轮廓上则返回零.
    我们可以检查点(50,50)如下:
    dist = cv2.pointPolygonTest(cnt,(50,50),True)
    在函数中,第三个参数是measureDist。 如果为True,则查找签名距离. 如果为False,则查找该点是在内部还是外部或在轮廓上(它分别返回+1,-1,0)
    NOTE
    果您不想找到距离,请确保第三个参数为False,因为这是一个耗时的过程. 因此,将其设为False可提供2-3倍的加速.

  2. matchShapes() 形状匹配
    结果越低,匹配就越好
    功能:根据计算比较两张图像Hu不变距(函数返回值代表相似度大小,完全相同的图像返回值是0,返回值最大是1)
    double cvMatchShapes(const void* object1, const void* object2, int method, double parameter = 0);
    /*
    第一个参数是待匹配的物体1,第二个是待匹配的物体2
    第三个参数method有三种输入:
    CV_CONTOURS_MATCH_I1
    CV_CONTOURS_MATCH_I2
    CV_CONTOURS_MATCH_I3
    即三种不同的判定物体相似的方法
    第四个参数 Parameter 方法的具体参数(暂不支持)
    */
    参考网址:https://segmentfault.com/a/1190000015665320
    更多参考:https://blog.csdn.net/u013293580/article/details/83896844

如果在用python语言开发:
需要注意:
pip install imutils (图像操作库,缩放,旋转等等)
import cv
opecv在python中使用
https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv (在windows下的python 扩展包)
opencv_python‑3.4.6‑cp37‑cp37m‑win_amd64.whl

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/264001
推荐阅读
相关标签
  

闽ICP备14008679号