OpenCV识别图形以及常用函数处理
前言
识别图形
常用函数介绍
前言
OpenCV在图像处理与计算机视觉方面有很多通用算法。因此可以用来人脸识别、图形识别、文字识别等等。对于复杂一点识别的可能还涉及到大量的识别训练,最后的匹配比较分类等等。后续可能会介绍文字识别、人脸识别等等。
图形识别
图形识别指的是对常见的几何图形进行识别,它通过opencv进图形处理(二值化,图片灰度化,细化等等),获取图形轮廓特征,然后在应用几何图形特征去识别为几何图形。目前对于自己绘画几何图形并识别总的来说,如果特征找到的好,识别率还是挺高的。
- 直线绘画
- 曲线绘画
这两种划线方式对识别曲线来说,误差还是有点大,直线绘画起来没有因手抖动误差,这误差很容易影响到在图形识别处理中识别轮廓处理,从而影响到识别分类。
逻辑处理流程图
对于流程图不会的,可以借鉴这片网址与我的代码图。
参考网址: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: 图形
常用函数介绍
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/78461488threhold() 阈值化
src:源图像,可以为8位的灰度图,也可以为32位的彩色图像。(两者由区别)
dst:输出图像
thresh:阈值
maxval:dst图像中最大值
type:阈值类型
参考网址:https://blog.csdn.net/u012566751/article/details/77046445canny() 边缘检测算法
网址: https://www.cnblogs.com/pacino12134/p/9877971.html
absdiff()
void cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );
src1 第一个原数组
src2 第二个原数组
dst 输出数组
函数 cvAbsDiff 计算两个数组差的绝对值approxPolyDP( 多边形逼近)
多边形逼近:
void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed);
参数说明:
InputArray curve:输入的点集
OutputArray approxCurve:输出的点集,当前点集是能最小包容指定点集的。draw出来即是一个多边形;
double epsilon:指定的精度,也即是原始曲线与近似曲线之间的最大距离。
bool closed:若为true,则说明近似曲线是闭合的,它的首位都是相连,反之,若为false,则断开。findContours函数 查找轮廓
findContours( InputOutputArray image, OutputArrayOfArrays contours,
OutputArray hierarchy, int mode,
int method, Point offset=Point());
参考网址:https://blog.csdn.net/dcrmg/article/details/51987348#convexHull() 函数 针对轮廓进行凸包计算
void convexHull(InputArray points,OutputArray hull,bool clockwise = false,bool returnPoints = true)
参数详解:
InputArray points: 得到的点集,一般是用图像轮廓函数求得的轮廓点
OutputArray hull: 输出的是凸包的二维xy点的坐标值,针对每一个轮廓形成的
bool clockwise = false: 表示凸包的方向,顺时针或者逆时针
bool returnPoint = true: 表示返回点还是点地址的索引arcLength() 函数 图像轮廓的周长
double arcLength(InputArray curve, bool closed)
参数详解:
InputArray curve:表示图像的轮廓
bool closed:表示轮廓是否封闭的contourArea()函数 轮廓面积
double cv::contourArea ( InputArray contour, bool oriented = false )
contour:是一个向量,二维点,可以是vector或Mat类型
oriented:有默认值false,面向区域标识符,如果为true,该函数返回一个带符号的面积,其正负取决于轮廓的方向(顺时针还是逆时针)。根据这个特性可以根据面积的符号来确定轮廓的位置。如果是默认值false,则面积以绝对值的形式返回.
pointPolygonTest()
此功能可查找图像中的点与轮廓之间的最短距离. 当点在轮廓外时返回负值,当点在内部时返回正值,如果点在轮廓上则返回零.
我们可以检查点(50,50)如下:
dist = cv2.pointPolygonTest(cnt,(50,50),True)
在函数中,第三个参数是measureDist。 如果为True,则查找签名距离. 如果为False,则查找该点是在内部还是外部或在轮廓上(它分别返回+1,-1,0)
NOTE
果您不想找到距离,请确保第三个参数为False,因为这是一个耗时的过程. 因此,将其设为False可提供2-3倍的加速.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
OpenCV识别图形以及常用函数处理相关推荐
- OPENCV数据结构体系和常用函数
opencv设计了一些基础的数据类型和一些帮助的数据类型 基础数据类型 : 图像类 IplImage: 矩阵类 CvMat; 可变集合类:CvSeq CvSet CvGraph; 多维柱状图混合类:C ...
- c语言界面函数,C语言图形界面常用函数集锦
(以下函数均应在图形方式初始之后使用(initgraph(a,b)),在win-tc中使用BGI图形程序模板时,其中已经定义有一个initgr函数,在main函数中应在执行initgr函数之后再使用这 ...
- OpenCV处理视频的常用函数
对视频的处理分析,其本质上是由一帧帧的图像组成,所以视频处理最终还是要归结于图像处理,因此本文主要介绍OpenCV在处理视频时的一些基本函数. 一.视频帧的读取 OpenCV为视频的读入提供了一个类V ...
- matlab二维图形函数,在MATLAB中,画二维图形的常用函数为( )。
[单选题]( )至今仍未走出困境,美欧与俄罗斯由此而展开的战略博弈也仍在持续. [多选题]信号跟踪的主要目的有: [判断题]You have the power to develop the sale ...
- OpenCV | OpenCv常用函数(代码类)
博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 俗语云:好记性不如烂笔头 //用到 ...
- python【Opencv计算机视觉库】opencv模块cv2常用函数用法(全)
文章目录 CV2实践所用到的图片 1.简单读写 2.图片翻转 3.色彩变换 4.给图片加文本 5.绘图 6.图像的表示 CV2实践所用到的图片 bug.png 1.简单读写 import cv2# 读 ...
- 干货|219个opencv常用函数汇总
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨AmosLLc 来源丨新机器视觉 作者为CSDN博主「AmosLLc」 原文链接:https: ...
- 图形轨迹c语言,OpenCV识别图像上的线条轨迹
如果图片上有线条,图形什么的,人的眼睛可以直接看出来,这是人的直接反应.那么如何让电脑识别呢? 图片在内存中是以二维矩阵的形式存储的,如果是彩图,则是GBR三通道,灰度图则是单通道.本教程用OpenC ...
- 【技术美术图形部分】2.3 HLSL常用函数
--介绍HLSL常用函数,API的使用. 想要成为合格的技术美术,一定要具备Shader开发能力,满足性能的需求,无论是技术美术的哪一个方向,HLSL都是需要点满的技能点. 参考 微软官方HLSL库: ...
- OpenCV常用函数记载
在实际经常用到OpenCV,这个库的函数多,功能强大,这篇博客主要用于记载自己在平时用到的一些OpenCV中的一些函数和方法.随时用到随时记载. 一.Mat类相关的操作 二.矩阵操作 1.opencv ...
最新文章
- c#_textbox显示刷新规定行数的数据
- 微信小程序中换行,空格(多个空格)写法
- 开箱即用——用模板快速生成《客户意见反馈表》
- BZOJ 4710: [Jsoi2011]分特产
- cass块参照怎么改颜色,【干货】新版本CASS符号颜色自定义详解
- 使用Java 8 CompletableFuture和Rx-Java Observable
- python 生成器_提高你的Python: 解释‘yield’和‘Generators(生成器)’
- [css] 手动写动画最小时间间隔是多少,为什么?
- c语言错误解析-变量声明
- koa-generator 快速生成 koa2 服务的脚手架工具
- 程序员真正的天赋是什么?
- 【转】Unity3D研究院之设置自动旋转屏幕默认旋转方向
- html页面中文乱码处理
- Java动态代理实现(转载\整理)
- 基于Zephyr在微型MCU上使用Tensor Flow Lite Micro做图像分类
- Java--对象的克隆
- 第九周 项目一--猴子选大王(数组版)
- 常用单片机和开发板的引脚功能图
- DevOps 小组运维管理手册
- 捋一捋Kafka中的消费者API