虽然之前写过一篇关于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. css控制超出部分自动省略...

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. c++_奖券数目

    奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要 ...

  3. BeautifulSoup与aiohttp的简单应用-爬取《网上中华五千年》音频

    香港电台的节目素质都比较不错,其中有个<中华五千年>的节目是以情景剧与旁白的形式来展示历史故事,由传说时代一直到民国,1983年首播至2000年,非常长寿的一个节目.网上能找到版本声音非常 ...

  4. LeetCode(101)Symmetric Tree

    题目 Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). Fo ...

  5. LeetCode(80)Remove Duplicates from Sorted Array II

    题目 Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For ex ...

  6. python基础——2(基本数据类型及运算符)

    目录 为何数据要区分类型? 一.数字类型 1.整型int 2.浮点型float 二.字符串str 三.列表类型list 四.字典类型 五.布尔类型 运算符的介绍 一.算术运算符 二.比较运算符 三.赋 ...

  7. Mac 10.10 配置apache

    配置php 命令行工具:http://blog.csdn.net/evane1890/article/details/38759073 自从系统从OS X Mavericks 10.9升级到OS X  ...

  8. STM32F407 串口通信实验 视频第27节 个人笔记

    前言 第26节也是串口,笔记链接在此:https://www.cnblogs.com/YuQiao0303/p/10019362.html github地址:https://github.com/Yu ...

  9. mysql查最大字符串

    select MAX(comp_code+0) from t_base_company 字符串 +0 把字符串转成数字

  10. nmon分析与详解

    1.命令安装 1.查看liunx版本版本x86_64_14i 目录:cd /nmon/logs/ 版本x86_64_14i [root@localhost u06]# cd / [root@local ...