虽然之前写过一篇关于OpenCV的介绍(http://blog.csdn.net/carson2005/article/details/5822149)。但依旧有朋友对其不甚了解。所以,常常能碰到有人问我诸例如以下面一些问题:OpenCV能不能实现人脸识别?OpenCV有没有车辆检測的API?OpenCV有没有三维重建的函数?面对这种问题。我也非常困惑。究竟该怎样给他们解释。才干让它们明确,OpenCV确实非常强大,但还没有他们想象中的那么强大。事实上。OpenCV的全称。是Open
source Computer Vision Library,开放源码计算机视觉库。也就是说。它是一套关于计算机视觉的开放源码的API函数库。这也就意味着。(1)无论是科学研究。还是商业应用,都能够利用它来作开发;(2)全部API函数的源码都是公开的。你能够看到其内部实现的程序步骤;(3)你能够改动OpenCV的源码,编译生成你须要的特定API函数。

可是。作为一个库,它所提供的。不过一些经常使用的。经典的。大众化的算法的API。一个典型的计算机视觉算法,应该包括以下一些步骤:(1)数据获取(对OpenCV来说,就是图片)。(2)预处理;(3)特征提取;(4)特征选择;(5)分类器设计与训练;(6)分类判别;而OpenCV对这六个部分,分别(记住这个词)提供了API。以下我分别就这六个部分对一些常见问题进行必要的解释。

对于数据获取,计算机视觉领域的数据,无非就是图片和视频两种。图片。有bmp,jpg,png,tiff....各种压缩和非压缩格式。

所以,对压缩格式的图片而言,OpenCV内部必定包括了相应的图片解压缩函数(一般都是包括了开源的图片解压函数库。比如,对于jpg压缩格式而言,就包括了libjpg开源库)。而对于视频而言,常见的有.rmvb,.avi,.asf等格式,不同的格式,代表着不同的视频压缩算法(对于AVI格式,虽然都是avi格式。但内部的压缩算法仍然不同样。详细原因请參考我的还有一篇博客:http://blog.csdn.net/carson2005/article/details/6314089),也就须要相应的解压算法来解压。虽然OpenCV提供了一些读写视频文件的API,可是,它也不过一个接口而已。其内部。依旧须要调用相应的视频编解码器的API来进行解码。

经常使用的视频编解码器有:xvid,ffmpeg等。

也就是说,假设你想利用OpenCV来进行视频读写之类的操作。是须要安装此类视频编解码器的。安装了相应的视频解码器之后。你就能够调用OpenCV的视频相关API来进行视频文件的读取操作了,当然。视频文件被解码之后,变成了一张一张的图片,然后才干被OpenCV所处理。另外,还有一种情况,就是数据来自于相机。包括数字相机和模拟相机。

无论是哪种相机,你都要想办法获取到相机发送给PC的图片数据(PC在内存里面接收到的来自相机的数据可能是jpg格式。也可能是bmp格式)。假设。你在PC内存中接收到的是相机发送过来的jpg压缩格式,还须要进行图片数据的内存解压。

关于相机和OpenCV的这部分内容,请见我还有一篇博客:

http://blog.csdn.net/carson2005/article/details/6243476

对于预处理。一般就是去除或者减少噪声,光照归一化,亮度归一化,模糊化,锐化。膨胀。腐蚀、开闭等这些操作(详见,冈萨雷斯,《数字图像处理》一书)。而对于这些操作,OpenCV分别(又提到这个词了)提供了对应API函数。

而光照的预处理。OpenCV提供了一个直方图均衡化的API。兴许可能会提供一些gammar矫正之类的函数。

对于特征提取,个人觉得。能够算是整个计算机视觉系统中最为复杂也最难的部分(纯属个人意见,如有异议,请保留)。究竟什么是特征,该怎样来理解这个看似简单却又包罗万象的名词呢?事实上,要想细致解释,还真的花费非常多时间(有兴趣的能够看看。Richard O.Duda(著),李宏东(译),《模式识别》。机械工业出版社)。简单点说,特征。就是一个能够将若干个类别能够尽量分开的一种描写叙述。

举例来说,假设你要进行男人和女人的分类,显然。用“身高和体重”这一描写叙述来衡量,是能够的,可是,这两个描写叙述没有“胸部大小”这一描写叙述更加准确,而“胸部大小”这一描写叙述。又没有“喉结的有无”这一描写叙述更准确。非常显然,“身高和体重”,“胸部大小”,“喉结的有无”,这三种描写叙述,都能够用来进行男人和女人的分类,仅仅只是,它们对事物的描写叙述的准确(或者说全面)程度是不同的,而诸如此类的描写叙述,有一个更加专业的称谓,叫做“特征”。OpenCV里面。提供了一些特征描写叙述的API,比方。对于人脸检測而言,它提供了haar特征的API,行人检測。提供了hog特征的API,甚至。它提供了LBP纹理特征的API。可是,这些还远远不够。比如,假设你要进行字符识别。OpenCV并没有提供字符识别所相应的特征。这个时候,就须要你自己来编程实现了。当然,该选择什么特征来描写叙述字符呢?哪些特征更好呢?对于这些问题,我建议你去阅读相应的会议,期刊,杂志,硕士、博士毕业论文(毕竟硕士、博士研究生本就该从事“研究”工作),看看别人写的文章,自然就知道了。

对于特征选择,OpenCV并没有提供特定的函数来进行衡量。而特征的分类能力的高低评价,有非常多种分析方法。有兴趣的朋友。能够阅读"《机器学习》Tom. Mitchell(著),曾华军(译),机械工业出版社"这本书;

对于分类器部分,OpenCV提供了SVM,CART,boost,bayes,bdt,ANN,这几种经常使用的算法。而这些基本已经覆盖了经常使用的分类器。所以,你须要做的,就是知道怎么调用其接口,各种分类器的长处和缺点(该部分,建议阅读“机器学习”这本书)。

通过以上的分析,你也许已经发现,OpenCV只是是一个工具而已。或者。你能够将它理解为幼儿园小朋友过家家玩的积木。而OpenCV中的函数,则能够理解为一个一个的积木块,利用全部或者部分积木块。你能够高速的搭建起来详细的计算机视觉方面的应用(比方,字符识别。车牌识别,遗留物检測)。想必你也已经发现,在利用OpenCV这个积木来搭建详细的计算机视觉应用的时候,真正核心的。应该是这些积木块,假设你明确了积木块的工作原理,那么。是不是就能够不用这些积木块了呢?全然正确!只是。一般部分情况下。我们不须要这么做,由于,OpenCV已经帮你做好了一些工作(已经帮你做好了一些积木块,直接拿来用就是了)。可是。诸如前面提到的特征提取模块,非常多情况下。OpenCV就无能为力了。这个时候,你就须要翻阅计算机视觉、模式识别、机器学习领域顶级会议、期刊、杂志上面发表的文章了。然后。依据这些文章中阐述的原理和方法,来编程实现你要的东西。

实际上,也就等于搭建一个属于你私有的积木块。事实上。OpenCV中的每个API函数,也就是这么来的。

原文出处:http://blog.csdn.net/carson2005/article/details/6979806

这里是收藏。冒犯。

再谈OpenCV的更多相关文章

  1. OpenCV学习笔记(四十)——再谈OpenCV数据结构Mat详解

    原文:http://blog.csdn.net/yang_xian521/article/details/7107786 我记得开始接触OpenCV就是因为一个算法里面需要2维动态数组,那时候看cor ...

  2. 再谈OPENCV(转)

    转自:http://blog.csdn.net/carson2005/article/details/6979806 尽管之前写过一篇关于OpenCV的介绍(http://blog.csdn.net/ ...

  3. zw版·Halcon与delphi(兼谈opencv)

    zw版·Halcon与delphi(兼谈opencv) QQ群 247994767(delphi与halcon) <Halcon与delphi>系列,早两年就想写,不过一方面,因为Halc ...

  4. [转载]再谈百度:KPI、无人机,以及一个必须给父母看的案例

    [转载]再谈百度:KPI.无人机,以及一个必须给父母看的案例 发表于 2016-03-15   |   0 Comments   |   阅读次数 33 原文: 再谈百度:KPI.无人机,以及一个必须 ...

  5. Support Vector Machine (3) : 再谈泛化误差(Generalization Error)

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  6. Unity教程之再谈Unity中的优化技术

    这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体   这一步主要是为了针对性能瓶颈中的”顶点 ...

  7. 浅谈HTTP中Get与Post的区别/HTTP协议与HTML表单(再谈GET与POST的区别)

    HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http: ...

  8. Another Look at Events(再谈Events)

    转载:http://www.qtcn.org/bbs/simple/?t31383.html Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不 ...

  9. C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)

    STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...

随机推荐

  1. web前端中的一些注释表达法

    1.HTML注释 <!--注释的内容--> 注释的地方(根据个人习惯可能有所不同): 结束标签的后面,这一切都是为了程序在嵌套的时候更加方便.明了,如: <div class=&qu ...

  2. UVa-1339-古老的密码

    这题的话,我们可以把字符串序列里面的字母直接计数,然后比较两个数组里面的数字是否一一相同,然后就可以直接判定YES or NO. 因为它题目中说的就是一种映射的关系,首先我们读入之后,把两个字符串的不 ...

  3. Openstack实验笔记

    Openstack实验笔记 制作人:全心全意 Openstack:提供可靠的云部署方案及良好的扩展性 Openstack简单的说就是云操作系统,或者说是云管理平台,自身并不提供云服务,只是提供部署和管 ...

  4. 第四讲:debugging simulation mismatches

    关于竞争冒险: 1.use +race utility to locate race condition code **** 2.use $vcdplusdeltacycleon to locate ...

  5. 第三天,小作业,表达式,while循环

    num += 1 等价于 num = num + 1num -= 1 等价于 num = num - 1num *= 2 等价于 num = num * 2num /= 2 等价于 num = num ...

  6. Python装饰器粗解学习

    此次学习资料详细来自:http://blog.csdn.net/u013471155 本次是粗学,仍有诸多疑问,暂且记录一二,如有不足和建议,希望可以达者指点. 三个关键点理解:   1.关于函数“变 ...

  7. 2017acm南宁现场赛 J题 Rearrangement

    题意: 给定一个2 * n的矩阵, 和 2 * n 个数, 问能不能通过重排列, 使得任意相邻两数不能被3整除 分析: 这题一直卡到最后, 赛后经对面大佬提醒后, 发现统计所有数模三的结果(0,1,2 ...

  8. Python变量及数据类型

    所有编程语言几乎都会有 ’ 变量‘ ,如 a = 2,用一个a变量指代数字2,在Python中,一切皆对象,因此在变量赋值的时候实际上是在内存中开辟了一块存储变量内容的内存空间对象. 对象可以指定不同 ...

  9. python024 Python3 实例

    Python3 实例 以下实例在 Python3.4.3 版本下测试通过: Python Hello World 实例 Python 数字求和 Python 平方根 Python 二次方程 Pytho ...

  10. python021 Python3 错误和异常

    Python3 错误和异常 作为Python初学者,在刚学习Python编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python有两种错误很容易辨认:语法错误和异常. ...