
opencv
年纪青青
嵌入式软件工程师:单片机编程,电路设计,Linux,Qt,opecv计算机视觉
展开
-
opencv DNN模块之人脸识别基于Torch openface
DNN 人脸识别使用facenet模型基于Torch,对每张图片进行多层卷积处理,计算出128个向量使用样本空间中的每张图的128个向量与采样的128个向量进行余弦相似度比较,0度为1,表示方向相同,90度为0,表示垂直正交。值越小,相似度越高,通过label存储的名字信息,可以把人检索出来,但是应该设置一定的阈值,否则会出现误检测代码实现过程模型加载人脸检测与识别模型特征向量输出...原创 2020-02-11 21:55:38 · 2364 阅读 · 3 评论 -
opencv DNN模块之人脸检测
DNN人脸检测在3.x版本人连检测,常用haar级联器检测,受光照、人脸位置影响比较大,识别率也不理想,DNN模块给出专用人脸模型,跟踪效果很好,抗干扰能力很强。在4版本之后DNN检测以后将会成为主流。opencv提供的模型基于SSD网络模型caffe训练生成的人脸检测模型基于SSD网络模型tensflow训练生成的人脸检测模型opencv模型量化版本16FP/uint8res...原创 2020-02-10 20:45:47 · 2811 阅读 · 2 评论 -
opencv DNN模块之使用SSD(caffe)实现视频对象检测
使用SSD(caffe)实现对视频中对象的检测###代码在访问速率优化上,采用指针形式#include <opencv2/opencv.hpp>#include <opencv2/dnn.hpp>#include <iostream>using namespace std;using namespace cv;using namespace c...原创 2020-02-10 20:06:15 · 721 阅读 · 1 评论 -
opencv DNN模块之YOLO(Darknet)对象检测
原理自行百度,本人不擅长YOLO 来自darknet对象检测框架基于COCO数据集,能检测80个类别YOLO V3版本https://pireddie.com/darknet/yolo每种网络模型对应的输入数据可以查看每种模型的模型二进制文件名称,网络描述文件名称,中至化处理参数,数据样本尺寸,描述label文件名称,rgb通道顺序以及典型应用场景等信息链接地址:https:...原创 2020-02-10 19:20:33 · 2305 阅读 · 0 评论 -
opencv DNN模块之Faster RCNN(Tensflow)检测物体
上一节写的是使用caffe的SSD模型来识别物体,能检测20种,本节使用tensflow的faster rcnn模型基于COCO数据集能检测80个类别,代码很相似原理本人不太懂,自行百度每种网络模型对应的输入数据可以查看每种模型的模型二进制文件名称,网络描述文件名称,中至化处理参数,数据样本尺寸,描述label文件名称,rgb通道顺序以及典型应用场景等信息链接地址:https://...原创 2020-02-10 17:51:19 · 1081 阅读 · 1 评论 -
opencv DNN模块之使用SSD(caffe)模型实现对象检测
上一节介绍了使用googlenet caffe模型实现对象分类,只能告诉图片中有什么,不能确定其位置,这一节使用Mobilenet SSD模型实现对象的检测,基于Pascal VOC数据集训练,能识别20个类别(刨除背景层)原理自行百度,本人不擅长每种网络模型对应的输入数据可以查看每种模型的模型二进制文件名称,网络描述文件名称,缩放尺度,中心化处理参数,数据样本尺寸,描述label文...原创 2020-02-10 10:34:57 · 989 阅读 · 0 评论 -
opencv DNN模块之使用GoogleNet Caffe模型实现图像分类
原理自行百度,本人不擅长相关函数api创建并载入神经网络Net函数apiNet cv::dnn::readNetFromCaffe ( const String &prototxt, const String &caffeModel = String()) 参数说明prototxt: prototxt文件的pr...原创 2020-02-09 14:11:46 · 840 阅读 · 0 评论 -
opencv视频运动对象计数
案例需求统计视频中行人个数实现方法采用BSM算法提取运动物体前景,通过形态学方法处理降噪,采用轮廓过滤基数代码#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace std;using namespace cv;int main(...原创 2020-02-08 17:17:03 · 2232 阅读 · 2 评论 -
opencv视频分析与对象追踪之CAMSHIFT对象跟踪
原理CamShift算法,全称是 Continuously AdaptiveMeanShift,顾名思义,它是对Mean Shift 算法的改进,能够自动调节搜索窗口大小来适应目标的大小,可以跟踪视频中尺寸变化的目标。它也是一种半自动跟踪算法,需要手动标定跟踪目标。基本思想是以视频图像中运动物体的颜色信息作为特征,对输入图像的每一帧分别作 Mean-Shift 运算,并将上一帧的目标中心和搜索窗...原创 2020-02-08 16:33:01 · 805 阅读 · 0 评论 -
opencv视频分析与对象追踪之基于光流(稀疏光流、密集光流)
光流跟踪光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的相应关系。从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是因为场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。研究光流场的目的就是为了从图片序列中近似得到不能直接得...原创 2020-02-07 22:50:11 · 2247 阅读 · 1 评论 -
opencv视频分析与对象追踪之基于颜色
适用场景根据画面中对象的颜色进行识别追踪,此种方法有一定局限性,首先目标颜色一定要与其他背景有着非常明显的区分,光照条件不经常变化不会导致对象颜色的突变。处理思路利用颜色范围过滤标注与测量操作步骤inRange过滤形态学操作提取轮廓查找外接矩形获取位置标定代码#include <opencv2/opencv.hpp>#include <i...原创 2020-02-07 15:26:46 · 397 阅读 · 0 评论 -
opencv视频分析与对象追踪之背景消除建模(BSM)适用于静态背景动态前景
原理介绍一些使用场景实际场景:电梯间检测人,电梯间没人的时候摄像头看到的都是轿箱图片,由于电梯内部光源比较恒定,平时变化部分不大属于背景,当有人进来的时候,当前帧与背景差值,就是新物体,可以做到人体检测。还可以用到其它的背景画面常态性不变的监控场景。基本原理图Background Subtraction基本原理BS算法图像分割(GMM-高斯混合模型)机器学习(KNN-K个...原创 2020-02-07 10:53:51 · 593 阅读 · 0 评论 -
opencv实战案例之视频绿幕背景替换
视频绿幕替换将视频中绿幕背景替换为其它图片,新闻报道中常用处理方法GMM或者KMeans方法太慢,视频容易卡顿基于色彩处理方法RGB到HSV色彩空间,颜色过滤获取掩膜,速度快HSV空间各种颜色分布范围代码#include <opencv2/opencv.hpp>#include <iostream>#include <math....原创 2020-02-06 19:09:16 · 3607 阅读 · 0 评论 -
opencv实战案例之照片背景替换
案例需求替换证件照片的背景颜色用到的知识K-Means背景融合-高斯模糊遮罩层生成处理流程数据组装,准备样本数据KMeans分割背景去除遮罩生成遮罩模糊通道混合输出–代码演示#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>usin...原创 2020-02-06 16:21:23 · 1402 阅读 · 0 评论 -
opencv图像分割之Grabcut
Grabcut原理部分请大家自行百度学习,本人不擅长。基于交互式界面由用户选择前景区域;定义一个单通道的输出掩码,0为背景,1为前景,2为可能的背景,3为可能的前景;grabCut抠图;将输出结果与可能的前景作比较得到可能的前景;定义三通道的结果图像;从原图中拷贝可能的前景到结果图像;相关api函数apigrabCut( InputArray img, ...原创 2020-02-06 14:25:41 · 557 阅读 · 1 评论 -
opencv图像分割之分水岭分割
分水岭分割watershed图像自动分割的实现步骤:图像灰度化、滤波、Canny边缘检测查找轮廓,并且把轮廓信息按照不同的编号绘制到watershed的第二个入参merkers上,相当于标记注水点。watershed分水岭运算(实质是将markers的轮廓线的信息,转化为按轮廓区分的块状信息)绘制分割出来的区域,视觉控还可以使用随机颜色填充,或者跟原始图像融合以下,以得到更好的显示效果...原创 2020-02-06 13:44:44 · 948 阅读 · 0 评论 -
opencv图像分割之GMM(高斯混合模型)方法
GMM简介不同于其它的机器学习模型,EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注。相反,该算法从给定的样本集中,能计算出高斯混和参数的最大似然估计。也能得到每个样本对应的标注值,类似于kmeans聚类(输入样本数据,输出样本数据的标注)。实际上,高斯混和模型GMM和kmeans都是EM算法的应用理部分请自行百度学习,本人不擅长相关函数api函数api bool tra...原创 2020-02-05 20:12:18 · 3001 阅读 · 0 评论 -
opencv图像分割之Kmeans方法(实现聚落与图片分割)
Kmeans方法概述无监督学习方法分类问题,输入分类数目,初始化中心位置硬分类方法,以距离度量迭代分类为聚类KMeans 原理介绍“聚对于"监督学习"(supervisedlea rning),其训练样本是带有标记信息的,并且监督学习的目的是:对带有标记的数据集进行模型学习,从而便于对新的样本进行分类。而在“无监督学习”(unsupervised learning)中,训练样本的...原创 2020-02-05 12:19:06 · 1417 阅读 · 0 评论 -
opencv之HAAR与LBP级联分类器,实现人脸识别人眼追踪
haar、LBP检测器原理本人不擅长,请自行百度级联器相关介绍Viola和Jones在2001在CVPR提出一种实时对象(人脸)检测框架训练速度非常慢,检测速度非常快5000个正向人脸样本与3000万个非人脸负样本数据级联分类器原理-AdaBoost弱分类器-Weak classifier = Feature强分类器-多个弱分类器的线性组合级联分类器-多个强分类器的组...原创 2020-02-04 16:37:29 · 1867 阅读 · 1 评论 -
opencv案例之统计图像周长、面积
案例背景照片是来自太空望远镜的星云图像,科学家想知道它的面积和周长方法步骤图像二值化形态学操作轮廓查找计算参数代码#include <opencv2/opencv.hpp>#include <opencv2/xfeatures2d.hpp>#include <iostream>#include <math.h>usi...原创 2020-02-03 17:16:42 · 1511 阅读 · 2 评论 -
opencv案例之图片透视矫正
案例背景拍摄或者扫描图像不是规则的矩形,会对后期处理产生不好的影响,需要通过透视变换矫正得到正确的形状方法二值化形态学操作,去噪点进行轮廓查找, 通过 矩形的长款过滤较小和图片的大边框霍夫直线变换,查找直线过滤直线,通过直线位置和长度确定上下左右四条直线求出四条直线得到四条直线的交点,这就是物体原始四个角点把原始的四个角点,变换到图片的四个角落,透视变换会把相对位置的像素通...原创 2020-02-03 16:29:28 · 1929 阅读 · 1 评论 -
opencv案例之对象计数(自适应阈值介绍)
案例需求背景农业领域经常需要计算对象个数或者在其他领域拍照自动计数,可以提高效率,降低成本解决思路二值分割形态学处理距离变换连通区域计算相应api自适应阈值处理在阈值处理操作中,仅通过设定固定阈值很难达到理想分割效果,我们需要从二值化的图像中分离目标区域和背景区域。实际上,目标和背景通常相互依存,我们可以从图像像素领域块的分布特征来自适应确定区域的二值化阈值。OpenC...原创 2020-02-03 12:53:42 · 841 阅读 · 1 评论 -
opencv案例之对象提取
案例场景将图片中的某个元素,提取。这里在黑白图中扣取圆圈部分实现方法代码实现#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace std;using namespace cv;#define PIC_PATH "/work/op...原创 2020-02-03 09:03:30 · 415 阅读 · 0 评论 -
opencv实例之检测试卷填空位置
应用场景检测试卷填空题天空位置处的横线位置,能找到位置,可为下一步计算机识别答案打下基础解决思路使用图像形态学操作寻找直线,利用霍夫变化获取位置信息与显示,直接霍夫变换效果很差代码演示#include <opencv2/opencv.hpp>#include <opencv2/xfeatures2d.hpp>#include <iostream>...原创 2020-02-02 21:49:38 · 539 阅读 · 0 评论 -
opencv之案例实战-扫描件切边
场景扫描仪扫描到法律文件有白边,需要切掉,看上去比较真实人工操作成本高时间久希望程序自动实现,高效、准确解决思路方法一:通过边缘检测+轮廓发现或者直线检测最大外矩形框实现方法二:通过二值分割+形态学方法+Hough直线找到最大外接矩形相关API函数原型void cv::warpAffine ( InputArray src, ...原创 2020-02-02 18:25:26 · 1103 阅读 · 0 评论 -
opencv之分类级联器-人脸检测
分类级联器实现人脸检测分类器逐级筛选最终选定人脸,可以通过haar积分/LBP检测方法实现,opencv已经实现现成的分类其我们可以拿来直接使用。分类器存放在(linux环境下)opencv源码编译路径下的share/opencvx/haarcascades路径下的.xml文件haarcascade_eye.xmlhaarcascade_eye_tree_eyeglasses.xmlhaa...原创 2020-02-02 11:59:17 · 523 阅读 · 0 评论 -
opencv之Brisk特征检测与匹配
Brisk特征介绍Binary Robust Invariant Scalable Keypoints构建尺度空间特征点检测FAST9-16寻找特征点特征点定位关键点描述子细节部分请参考算法论文,这里不做详细介绍,本人不擅长代码演示#include <opencv2/opencv.hpp>#include <opencv2/xfeatures2d.hpp...原创 2020-02-02 10:23:10 · 1303 阅读 · 0 评论 -
opencv之AKAZE局部检测与匹配
AKAZE局部匹配介绍AOS构造尺度空间Hessian矩阵特征点检测方向指定基于一阶微分图像描述子生成AKAZE与KAZE的区别带K是快速的与SIFT/SURF比较更加稳定非线性尺度空间AKAZE速度更加快比较新的算法,只有在opencv新版本中才有KAZE是日语音译过来的 , KAZE与SIFT、SURF最大的区别在于构造尺度空间,KAZE是利用非线性方式构造,得到的...原创 2020-02-02 08:37:35 · 2344 阅读 · 1 评论 -
opencv之平面对象识别
对象形变与位置变换待检测图像样本一般与检测样本中的实际状态在形态学上会有不同,例如一本书会发生扭曲。可以通过以下函数进行校正对应findHomography 发现两个平面的透视变换,生成变换矩阵perspectiveTransform 透视变换代码演示#include <opencv2/opencv.hpp>#include <opencv2/xfeatures...原创 2020-02-01 17:50:28 · 1203 阅读 · 0 评论 -
opencv之特征描述子与匹配(暴力匹配与FLANN匹配)
什么叫特征描述子/匹配什么是特征描述子图片具有特有特征匹配提取一份图像中的特征,去训练集图像库寻找,寻找贴合区域一些用到的API介绍函数apivoid cv::drawMatches( InputArray img1, const std::vector< KeyPoint > &...原创 2020-02-01 16:11:24 · 3586 阅读 · 0 评论 -
opencv之积分图计算
积分图像计算介绍图像积分就是某像素点左上角全部图像像素之和,opencv提供算法,可以计算任意一块区域积分和,原理是利用该区域总和减去相邻两块区域和,在加上相邻两块区域的重叠部分(由于多减掉一次)。积分图像计算相关API函数APIvoid integral( InputArray src, OutputArray sum,OutputArray sqsum, int sdepth = -...原创 2020-01-31 16:42:03 · 763 阅读 · 1 评论 -
opencv之HOG特征检测+SVM实现行人检测
HOG特征检测介绍属于块检测范畴,对于行人、动物、物体检测比较理想HOG特征描述子提取灰度图像转换梯度计算索贝尔算子计算分网格的梯度方向直方图分割为8*8=64像素的Cell网格对每个Cell求取方向直方图(Orientation Hist)区间分布上分为9个Bin,角度取值范围为-180180之间,对-1800之间的加上180取正数,对应的值为梯度值。方向为Bin数组...原创 2019-12-24 17:51:34 · 1490 阅读 · 0 评论 -
opencv之SIFT特征检测介绍
SIFT特征检测介绍SIFT(Scale-Invariant Feature Transform)特征检测关键特性建立尺度空间,寻找极值工作原理构建图像高斯金字塔,求取DoG,发现最大与最小值在每一级构建的高斯金字塔,每一层根据sigma值不同,可以分为几个等级,最少有四个关键点定位(寻找关键点准确位置与删除若边缘)我们在像素级别获得了极值点的位置,但是更准确的值应该...原创 2019-12-18 17:30:11 · 1017 阅读 · 0 评论 -
opencv之SURF特征点检测,只检测不匹配
SURF(Speeded UP Robust Features)特征关键特性特征检测尺度空间选择不变形特征向量工作原理选择图像中POI(Points of Interest)Hessian Matrix在不同的尺度空间发现关键点,非最大信号抑制发现特征点方向、旋转不变性要求生成特征向量具体算法不擅长,请参考:https://www.cnblogs.com/gfgwxw...原创 2019-12-18 08:31:18 · 406 阅读 · 0 评论 -
opencv之亚像素精度级别的角点检测
概述在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。从图像分析的角度来定义角点可以有以下两种定义:角点可以是两个边缘的角点;角点是邻域内具有两个主方向的特征点;一提到角点检测,最常用的方法莫过于Harris角点检测,opencv中也提供了Harris角点检测的接口,即cornerHarris(),但是Harris角点检测存在很多缺陷(如角点是像素级别的,速度较慢等)...原创 2019-12-16 18:43:03 · 1939 阅读 · 0 评论 -
opencv之shi_tomasi角点检测
概述shi_tomasi角点检测基于harris角点检测理论,只是在计算角点响应的方法上有区别,更加简单有效率,效果也不错。R=min(λ1,λ2)R=min(λ1,λ2)R=min(λ1,λ2)函数API函数apivoid goodFeaturesToTrack( InputArray image, OutputArray corners, ...原创 2019-12-16 16:12:51 · 295 阅读 · 0 评论 -
opencv之Harris角点检测
opencv4.1.2+contrib win10 VS2019算法基础角点是一类比较特殊的点,构成角点的条件两条或者多条线的交叉,线可以理解为边缘特征很强的像素点的集合,在opencv中大部分的图像处理基于掩膜移动来实现,在矩形框内如果在没有角点的区域内也就是所谓的平原地带,无论向哪个方向移动,矩形框内圈住的内容的梯度变化都不大,如果矩形框处在单边缘线上,矩形框移动时只能在一个方向产生较...原创 2019-12-16 14:13:42 · 271 阅读 · 0 评论 -
opencv中行和列顺序问题
Mat系列在使用的时候,参数顺序是先行后列,先y后x;Mat (int rows, int cols, int type)Mat::at(int rows, int cols)…Size在使用的时候,默认是先宽后高,即先列后行,先x后y。Size(int width, int height)...原创 2019-11-27 08:54:56 · 2152 阅读 · 0 评论 -
opencv之基于距离变换与分水岭的图像分割
概述什么是图像分割图像分割(image segmentation)是图像处理最重要的处理手段之一图像分割的目标是将图像中像素根据一定的规则分为若干(N)个cluser集合,每个集合包含一类像素根据算法分为监督学习方法和无监督学习方法,图像分割的算法多数都是无监督的学习方法-KMeans距离变换常见的额算法有两种不断膨胀/腐蚀得到基于倒角距离分水岭变换常见方法基于浸泡理论...原创 2019-11-19 09:10:29 · 651 阅读 · 0 评论 -
opencv之点与多边形位置关系测试
概念介绍测试一个点是否在给定的多边形内部,边缘或者外部API介绍APIdouble cv::pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)参数介绍第一个参数InputArray contour,输入的轮廓第二个参数Point2f pt,需要测试的点坐标第三个参数bool measureDist...原创 2019-11-18 13:32:15 · 903 阅读 · 0 评论