
opencv
文章平均质量分 78
zhaocj
这个作者很懒,什么都没留下…
展开
-
Win7下qt5.3.1+opencv2.4.9编译环境的搭建
到官网下载qt-opensource-windows-x86-mingw482_opengl-5.3.1.exe文件,执行该文件,选择默认安装即可实现QT的安装(安装在C盘的根目录下),该文件封装好了Qt libraries、Qt Creator,其中Qt Creator为3.1.2版本。 到官网http://opencv.org/downloads.html下原创 2014-08-30 14:29:40 · 32675 阅读 · 33 评论 -
Opencv2.4.9源码分析——Random Trees
一、原理 随机森林(Random Forest)的思想最早是由Ho于1995年首次提出,后来Breiman完整系统的发展了该算法,并命名为随机森林,而且他和他的博士学生兼同事Cutler把Random Forest注册成了商标,这可能也是Opencv把该算法命名为Random Trees的原因吧。一片森林是由许多棵树木组成,森林中的每棵树可以说是彼此不相关,也就是说每棵树木的生长完全是原创 2016-06-03 17:01:28 · 9173 阅读 · 10 评论 -
Opencv2.4.9源码分析——Extremely randomized trees
一、原理 ET或Extra-Trees(Extremely randomized trees,极端随机树)是由PierreGeurts等人于2006年提出。该算法与随机森林算法十分相似,都是由许多决策树构成。但该算法与随机森林有两点主要的区别:1、随机森林应用的是Bagging模型,而ET是使用所有的训练样本得到每棵决策树,也就是每棵决策树应用的是相同的全部训练样本;2、随机森林是原创 2016-06-12 21:04:38 · 10973 阅读 · 9 评论 -
Opencv2.4.9源码分析——Expectation Maximization
一、原理 期望极大算法(EM,Expectation Maximization)是一种能够得到极大似然参数估计的迭代方法。虽然EM算法在不同的领域被更早的提出,但它是由Dempster等人于1977年被正式命名并给出解释。对于一个除了拥有未知参数和可观测变量外,还包含隐含变量的统计模型来说,是无法用极大似然方法直接得到参数的,这是因为我们不能像极大似然法那样,同时对未知参数和隐含变量求原创 2016-09-02 20:10:59 · 5480 阅读 · 0 评论 -
Opencv2.4.9源码分析——Neural Networks
一、原理神经网络(Neural Networks)是一种模仿生物神经系统的机器学习算法。该算法的提出最早可追述至上个世纪四十年代,这几乎与电子计算机的历史同步。但它的发展并非一帆风顺,也经历了初创阶段—黄金阶段—停滞阶段—复兴阶段,直到目前的高速发展阶段。年初由Google公司开发的神经网络围棋——AlphaGo击败世界围棋冠军李世石,使神经网络技术更是受到世人的注目,因为它的意义要远大于19原创 2016-10-07 09:35:08 · 8514 阅读 · 15 评论 -
Opencv2.4.9源码分析——Cascade Classification(一)
我把级联分类器分为三部分内容介绍,第一部分内容是原理。物体识别,尤其是人脸识别,是近二、三十年里计算机视觉领域一个热门的课题。它的应用范围极广,目前成熟的算法也较多。OpenCV也集成了一个物体识别的算法,它主要是基于Viola和Jones这两个人于2001年提出的震惊业界的Viola & Jones算法,该算法最初是用于人脸识别,但在对其它刚性物体的识别上效果也极佳。Viol原创 2017-01-04 09:16:36 · 8272 阅读 · 14 评论 -
Opencv2.4.9源码分析——Cascade Classification(三)
前两篇文章分别介绍了级联分类器的原理和源码解析,下面我们给出一个具体的应用实例。 下面我们以车牌识别为例,具体讲解OpenCV的级联分类器的用法。在这里我们只对蓝底白字的普通车牌进行识别判断,对于其他车牌不在考虑范围内。而且车牌是正面照,略微倾斜可以,倾斜程度太大也是不在识别范围内的。我们通过不同渠道共收集了1545幅符合要求的带有车牌图像的照片(很遗憾,我只能得到这么多车牌照片,原创 2017-01-13 21:32:45 · 10018 阅读 · 10 评论 -
Opencv2.4.9源码分析——Cascade Classification(二)
上一篇文章我们介绍了级联分类器的原理,下面我们给出级联分类器的源码分析。训练级联分类器的源码在opencv/sources/app/traincascade目录下。首先我们给出级联分类器的特征类型的相关类和函数。CvHaarFeatureParams、CvLBPFeatureParams和CvHOGFeatureParams分别表示HAAR状特征、LBP特征和HOG特征的参数类原创 2017-01-09 19:09:23 · 6623 阅读 · 0 评论 -
Opencv2.4.9源码分析——Decision Trees
一、原理 决策树是一种非参数的监督学习方法,它主要用于分类和回归。决策树的目的是构造一种模型,使之能够从样本数据的特征属性中,通过学习简单的决策规则——IF THEN规则,从而预测目标变量的值。图1 决策树例如,在某医院内,对因心脏病发作而入院治疗的患者,在住院的前24小时内,观测记录下来他们的19个特征属性——血压、年龄、以及其他17项可以综合判断病人状况的重要指标,原创 2016-01-12 13:42:39 · 10782 阅读 · 7 评论 -
Opencv2.4.9源码分析——Stitching(一)
相机镜头所呈现出的景物要比人类的视觉系统所看到的景物要狭小得多,因此一幅图像不可能捕获到我们所看到的整个景物。全景图像拼接给出了这个问题的解决办法,它是把图像间重叠部分拿出来拼接起来,从而得到一幅更大的图像。这种算法也可以用于把一幅图像插入到另一幅图像中。图1 图像拼接执行过程及方法要想完成图像拼接,所要用到的算法较多,Opencv把这些算法用一张图呈现了处理,如图1所示。下面我们原创 2017-12-14 09:08:13 · 25651 阅读 · 6 评论 -
Opencv2.4.9源码分析——Stitching(二)
2、计算单应矩阵2.1 原理在得到了图像特征点以后,我们就可以根据这些特征点,实现图像匹配,即得到重叠区域。而要把多幅图像拼接成一幅图像,就需要以某幅图像为基准,把其他图像映射到该图像所在的平面。映射的关键所在就是根据重叠区域的特征点计算图像间的单应矩阵。我们可以通过最近邻算法(K-NN,这里的K表示最近邻特征点的数量)得到与图像A中的某一特征点a最相似的其他任意一幅图像B的K个特征点原创 2017-12-14 10:33:26 · 20069 阅读 · 17 评论 -
Opencv2.4.9源码分析——Stitching(三)
3、相机参数评估3.1 原理相机参数的评估也称为相机定标。要想理解这部分内容,首先应该从成像原理开始讲起。图6 小孔成像原理从图6可以看出,真实物体通过小孔映射到成像平面上,小孔到成像平面的距离称为焦距f。在成像平面上的图像是镜像倒立的,所以为了研究方便,在小孔和物体之间定义一个虚拟成像平面(在后面,我们把该平面也称为成像平面),它与小孔的距离也为焦距,则两个成像平面的原创 2017-12-15 09:34:05 · 24408 阅读 · 21 评论 -
Opencv2.4.9源码分析——Stitching(六)
6、寻找接缝线6.1 原理拼接图像的另一个重要的步骤是找到图像重叠部分内的一条接缝线,该接缝是重叠部分最相似的像素的连线。当确定了接缝线后,在重叠部分,线的一侧只选择该侧的图像部分,线的另一侧只选择这一侧的图像部分,而不是把重叠部分的两幅图像简单融合起来。这么做的目的可以避免图像的模糊及伪像。目前,常用的寻找接缝线的方法有三种:逐点法、动态规划法和图割法。逐点法比较简单,它的原理就原创 2018-01-01 11:27:40 · 14263 阅读 · 5 评论 -
Opencv2.4.9源码分析——Stitching(五)
5、曝光补偿5.1 原理即使通过几何投影,图像之间可以做到很好的拼接,但如果不同图像之间有不同的曝光程度,那么拼接图像中的重叠部分也会出现明显的边缘,这样就使图像看起来十分不自然。因此,我们还需要对每幅图像进行曝光补偿,来使所有图像具有相同的曝光程度。目前,常用的曝光补偿方法有增益补偿和分块补偿这两种方法。增益补偿就是为每幅图像赋予一个增益系数,使重叠部分的图像强度相等或相似。它可以利原创 2017-12-24 10:25:50 · 16775 阅读 · 7 评论 -
Opencv2.4.9源码分析——Stitching(四)
4、图像投影变换4.1 原理前文我们已经说过,每幅图像是相机在不同角度下拍摄得到的,它们并不在同一个投影平面上,如果对重叠部分直接进行拼接,则会破坏实际场景的视觉一致性。所以我们需要在拼接之前,对图像进行投影变换,即对图像进行扭曲变形。设图像中某像素点的二维坐标为(x, y),它所对应的世界坐标为(X, Y, Z),两者之间的关系为:(70)式中,R为旋转矩阵,K为相机的内原创 2017-12-18 09:46:12 · 15849 阅读 · 13 评论 -
Opencv2.4.9源码分析——Stitching(七)
7、融合7.1 原理在上一步中,虽然我们已经得到了接缝线,但如果只是简单的对接缝线的两侧选取不同的图像,那么对于重叠区域,在接缝线处的过度会出现不连贯的现象,在视觉上会显得有些突兀。因此我们还需要在接缝线两侧,对不同图像进行融合处理来克服上述不足之处。应用于图像拼接的融合算法有两种常用的方法:羽化和多频段融合。羽化的原理是对边界进行平滑虚化,通过渐变的方法达到自然衔接的效果。在应用于图原创 2018-01-03 14:00:13 · 13172 阅读 · 4 评论 -
Opencv2.4.9源码分析——Stitching(八)
8、完整的拼接程序 下面给出完整的拼接程序:#include "opencv2/core/core.hpp"#include "highgui.h"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/features2d/features2d.hpp"#include "opencv2/nonfree/nonfree.原创 2018-01-04 08:17:04 · 11908 阅读 · 16 评论 -
Opencv2.4.9源码分析——Stitching(九)
9、Stitcher类图像拼接方法用到的算法较多,内容较复杂,可能对于一些人来说用起来过于繁琐,因此Opencv把拼接算法封装到了Stitcher类中,这样就不必理会拼接算法中的具体实现过程。下面我们就简单介绍一下Stitcher类中的一些常用的函数: 用系统缺省值创建图像拼接器stitcher:Stitcher Stitcher::createDefault(bool try原创 2018-01-06 16:15:59 · 12186 阅读 · 22 评论 -
Opencv2.4.9源码分析——Gradient Boosted Trees
一、原理 梯度提升树(GBT,Gradient Boosted Trees,或称为梯度提升决策树)算法是由Friedman于1999年首次完整的提出,该算法可以实现回归、分类和排序。GBT的优点是特征属性无需进行归一化处理,预测速度快,可以应用不同的损失函数等。从它的名字就可以看出,GBT包括三个机器学习的优化算法:决策树方法、提升方法和梯度下降法。前两种算法在我以前的文章中都有详细的原创 2016-05-20 15:28:16 · 9424 阅读 · 8 评论 -
OpenCV2.4.9源码分析——Support Vector Machines
引言本文共分为三个部分,第一个部分介绍SVM的原理,我们全面介绍了5中常用的SVM算法:C-SVC、ν-SVC、单类SVM、ε-SVR和ν-SVR,其中C-SVC和ν-SVC不仅介绍了处理两类分类问题的情况,还介绍处理多类问题的情况。在具体求解SVM过程中,我们介绍了SMO算法和广义SMO算法。第二个部分我们给出了OpenCV中SVM程序的详细注解。第三个部分我们给出了一个基于OpenCV的S原创 2016-05-02 20:14:06 · 10380 阅读 · 5 评论 -
Opencv2.4.9源码分析——bilareralFilter
双边滤波(bilateral filter)是一种非线性滤波技术,它是由Tomasi于1998年提出。它扩展了高斯平滑滤波技术。高斯滤波是一种常见并且有效的滤波方法,简单地说它是以被处理像素与其周围像素的距离作为权重而进行的一种加权平均过程。高斯距离权值为:(1)其中,d(ξ,x)=d(ξ-x)=||ξ-x||表示的是两个像素ξ和x之间的距离。但该权值仅仅考原创 2014-09-24 10:43:07 · 13920 阅读 · 6 评论 -
Opencv2.4.9源码分析——adaptiveBilateralFilter
上一篇文章我们介绍了双边滤波,它的公式为:(1)原创 2014-09-25 17:41:41 · 10962 阅读 · 8 评论 -
Opencv2.4.9源码分析——HoughLinesP
标准霍夫变换本质上是把图像映射到它的参数空间上,它需要计算所有的M个边缘点,这样它的运算量和所需内存空间都会很大。如果在输入图像中只是处理m(mM)个边缘点,则这m个边缘点的选取是具有一定概率性的,因此该方法被称为概率霍夫变换(Probabilistic Hough Transform)。该方法还有一个重要的特点就是能够检测出线端,即能够检测出图像中直线的两个端点,确切地定位图像中的直线。Ho原创 2014-10-13 16:35:05 · 35371 阅读 · 21 评论 -
Opencv2.4.9源码分析——MSER
最大稳定极值区域(MSER-Maximally Stable Extremal Regions)可以用于图像的斑点区域检测。该算法最早是由Matas等人于2002年提出,它是基于分水岭的概念。MSER的基本原理是对一幅灰度图像(灰度值为0~255)取阈值进行二值化处理,阈值从0到255依次递增。阈值的递增类似于分水岭算法中的水面的上升,随着水面的上升,有一些较矮的丘陵会被淹没,如果从天空往下看原创 2014-11-03 16:10:08 · 55618 阅读 · 25 评论 -
Opencv2.4.9源码分析——MSCR
前面我们介绍了MSER方法,但该方法不适用于对彩色图像的区域检测。为此,Forssen于2007年提出了针对彩色图像的最大稳定极值区域的检测方法——MSCR(Maximally Stable Colour Regions)。MSCR的检测方法是基于凝聚聚类(AgglomerativeClustering)算法,它把图像中的每个像素作为对象,通过某种相似度准则,依次逐层的进行原创 2015-01-27 10:51:24 · 6985 阅读 · 6 评论 -
Opencv2.4.9源码分析——SURF
SURF (Speeded Up Robust Features)是一种具有鲁棒性的局部特征检测算法,它首先由Herbert Bay等人于2006年提出,并在2008年进行了完善。其实该算法是Herbert Bay在博士期间的研究内容,并作为博士毕业论文的一部分发表。SURF算法的部分灵感来自于SIFT算法,但正如它的名字一样,该算法除了具有重复性高的检测器和可区分性好的描述符特点外,原创 2015-01-10 18:45:53 · 13639 阅读 · 17 评论 -
Opencv2.4.9源码分析——SIFT
SIFT(尺度不变特征变换,Scale-Invariant Feature Transform)是在计算机视觉领域中检测和描述图像中局部特征的算法,该算法于1999年被David Lowe提出,并于2004年进行了补充和完善。该算法应用很广,如目标识别,自动导航,图像拼接,三维建模,手势识别,视频跟踪等。不幸的是,该算法已经在美国申请了专利,专利拥有者为Lowe所在的加拿大不列颠哥伦比亚大...原创 2014-12-24 15:34:28 · 38828 阅读 · 149 评论 -
Opencv2.4.9源码分析——FAST
FAST(Features fromaccelerated segment test)是一种角点检测方法,它可以用于特征点的提取,并完成跟踪和映射物体。FAST角点检测算法最初是由Edward Rosten和Tom Drummond提出,该算法最突出的优点是它的计算效率。正如它的缩写名字,它很快而且事实上它比其他著名的特征点提取方法(如SIFT,SUSAN,Harris)都要快。而且如果应用机器学原创 2014-10-20 15:47:11 · 20232 阅读 · 16 评论 -
Opencv2.4.9源码分析——BRIEF
在嵌入式系统内,对图像进行实时匹配,这项任务给特征点的检测与描述提出了更高的要求。这不仅要求运算速度快,而且还要求占用更少的内存。SIFT和SURF方法性能优异,但它们在实时应用中就力不从心,一个主要的原因就是特征点的描述符结构较复杂,表现形式是第一描述符的维数较多,第二描述符采用浮点型的数据格式。维数多固然可以提高特征点的可区分性,但使描述符的生成和特征点的匹配的效率降低,另原创 2015-03-13 09:41:54 · 7761 阅读 · 8 评论 -
Opencv2.4.9源码分析——DenseFeatureDetector
DenseFeatureDetector可以生成具有一定密度和规律分布的图像特征点,它主要用于3D VIZ。DenseFeatureDetector的原理是,把输入图像分割成大小相等的网格,每一个网格提取一个像素作为特征点。类似于图像尺度金字塔,该方法也可以生成不同层图像的特征点,每一层图像所分割的网格大小是不同的,即表示各层的尺度不同。 下面我们就来分析它原创 2015-04-22 18:58:14 · 6057 阅读 · 0 评论 -
Opencv2.4.9源码分析——HoughLines
霍夫变换是一种特征提取技术。经典的霍夫变换能够识别出图像中的直线,后来又发展到能够识别出任意形状,但更常见的识别形状是圆和椭圆。函数HoughLines的作用就是能够检测出边缘图像中的直线。在直角坐标系下,直线被定义为:y = mx + b (1)其中,m为斜率,b为与y轴的截距,只要确定了m和b,一条直线就可以被唯一地确定下来。如果用ρ0表示原点到该直线的代数距离,θ原创 2015-12-13 11:05:47 · 18336 阅读 · 17 评论 -
Opencv2.4.9源码分析——Boosting
一、原理 AdaBoost(Adaptive Boosting,自适应提升)算法是由来自AT&T实验室的Freund和Schapire于1995年首次提出,该算法解决了早期Boosting算法的一些实际执行难题,而且该算法可以作为一种从一系列弱分类器中产生一个强分类器的通用方法。正由于AdaBoost算法的优异性能,Freund和Schapire因此获得了2003年度的哥德尔奖(Gödel原创 2016-01-18 14:51:50 · 9187 阅读 · 10 评论 -
Opencv2.4.9源码分析——HoughCircles
图形可以用一些参数进行表示,标准霍夫变换的原理就是把图像空间转换成参数空间(即霍夫空间),例如霍夫变换的直线检测就是在距离-角度空间内进行检测。圆可以表示成:(x-a)2+(y-b)2=r2 (1)其中a和b表示圆心坐标,r表示圆半径,因此霍夫变换的圆检测就是在这三个参数组成的三维空间内进行检测。原则上,霍夫变换可以检测任何形状。但复杂的形状需要的原创 2016-01-04 11:17:14 · 30773 阅读 · 33 评论 -
Opencv2.4.9源码分析——phaseCorrelate
相位相关法(phase correlate)可以用于检测两幅内容相同的图像之间的相对位移量。它是基于傅立叶变换的位移定理:一个平移过的函数的傅立叶变换仅仅是未平移函数的傅立叶变换与一个具有线性相位的指数因子的乘积,即空间域中的平移会造成频域中频谱的相移。它的公式定义为:设二维函数(图像)f(x,y)的傅立叶变换为F(u,v),即DFT[f(x,y)]=F(u,v),如果f(x,y)平移(a,b),原创 2015-12-03 11:10:05 · 18582 阅读 · 21 评论 -
Opencv2.4.9源码分析——Normal Bayes Classifier
一、原理 OpenCV实现的贝叶斯分类器不是我们所熟悉的朴素贝叶斯分类器(Naïve Bayes Classifier),而是正态贝叶斯分类器(Normal Bayes Classifier),两者虽然英文名称很相似,但它们是不同的贝叶斯分类器。前者在使用上有一个限制条件,那就是变量的特征之间要相互独立,而后者没有这个苛刻的条件,因此它的适用范围更广。为了保持理论的系统性和完整性,我们还是原创 2016-01-31 16:26:11 · 5431 阅读 · 1 评论 -
Opencv2.4.9源码分析——K-Nearest Neighbors
一、原理 K近邻算法(KNN,K-NearestNeighbors)是一种非常简单的机器学习方法,它既可以处理分类问题,也可以处理回归问题,而且它的执行效果非常好。KNN是一种懒惰学习算法(lazy learningalgorithm)。所谓懒惰算法指的是,直到有了新的测试样本,该算法才开始依据训练样本进行样本的预测处理工作,也就是说该算法事先不会对训练样本进行任何的处理,只会“懒散”原创 2016-02-29 11:21:31 · 7086 阅读 · 5 评论 -
Opencv2.4.9源码分析——SimpleBlobDetector
Opencv中提供了SimpleBlobDetector的特征点检测方法,正如它的名称,该算法使用最简单的方式来检测斑点类的特征点。下面我们就来分析一下该算法。首先通过一系列连续的阈值把输入的灰度图像转换为一个二值图像的集合,阈值范围为[T1,T2],步长为t,则所有阈值为:T1,T1+t,T1+2t,T1+3t,……,T2 (1)原创 2015-04-05 11:28:09 · 22932 阅读 · 2 评论 -
谷歌全景拼接出错之我见
最近,一篇关于使用谷歌AI全景拼接技术对照片进行拼接出错的新闻引爆了社交网络。这和我前段时间所研究的Opencv全景拼接技术有关,因此这篇新闻也引起了我的兴趣。事件的起因是Alex Harker和他的朋友在加拿大路易斯湖滑雪场滑雪时,拍了三张照片(如图1所示),一张有人物的,另两张为纯风景照,当用谷歌照片合成时,竟然出现了“山中巨人”般的效果(如图2所示)。图1 原始三张照片图原创 2018-01-26 20:10:35 · 6031 阅读 · 3 评论