图像处理之_OpenCV入门
图像处理之 _OpenCV 入门
1. 带着问题看 OpenCV
1) 实现了哪些功能,如何调用?
OpenCV 实现了图像处理(类似 PhotoShop),校正,分割前景背景,视频监控,运动跟踪,人脸识别,手势识别等功能,并支持机器学习算法。和很多开源工具一样,它提供的是很基础的功能。程序开发者利用基本函数的组合,适配场景,实现具体功能。它本身只是一个工具集,不是具体问题的解决方案。
只在应用层面调用的话,知道基本的数据结构,函数接口,就可以了。
2) 如何应用数学知识?
可以把学习 OpenCV 看做应用“数学”的过程,空间,矩阵,微积分,统计等工具都在其中使用。图像处理是应用数学较多的领域,具体实现可以通过源码看到,更重要的是了解数学方法的具体用途,才能举一反三。
了解其中的数学方法,是较深入的层面,如果大学数学都已经忘记了,就很容易卡住,或者似乎明白了,又似乎不明白。不妨把它作为一个切入点,带着这些问题去看数学书,然后会发现数学很有用。OpenCV 还有一个好处是,它能很直观地看到操作之后的效果,用实例理解抽象的概念。
3) 如何组织和处理视觉信息?
OpenCV 在数据存储,压缩,快速处理,数据共用等方面的很多技术很值得借鉴,主要是围绕其原始数据和特征值展开。详见其数据结构,函数,以及流程。
视觉信息对于三维空间,只是单个侧面的投射,想还原真实场景,还需要更多先验知识。虽然 OpenCV 中自带机器学习功能,可以训练对人脸手势的识别,以及测距等等,这些也只是功能点,而未连成面,好像并没有一套逻辑去存储和处理三维空间。
和人对视觉信息的处理,还差得非常远,基本没有可比性。只实现的眼睛的功能,缺少脑子的功能,人工智能训练出来的又往往“不可道,不可名”,在中间还有个断档,比如说分解子任务,总结和存储背景知识等等(个人看法)。
2. 简介
1) 使用
OpenCV 采用 C/C++ 编写,还提供了 Phthon,Ruby,MATLAB,Android 接口。
2) 协议
OpenCV 基于 BSD 协议,可商用,且不强制开放改善后的源码。
3) 组成(具体见源码目录)
基本数据结构(CXCore)
图像处理和算法(CV)
机器学习(ML)
外部支持:图像视频输入/输出(HighGUI)
3. Ubuntu 系统安装 OpenCV
1) 简单安装
1 | $ sudo apt-get install libcv-devapt-get |
自动安装了 libcv-dev 的所有依赖库,比较省事。
####2) 源码安装
相对麻烦,但是可以看到源码和例程
下载
http://wiki.opencv.org.cn/index.php/Download
下载最新的 Android 和 Linux 版本
安装
1 | $ unzip opencv-3.2.0.zip |
编译和试用
例程 OpenCV 源码目录/samples/cpp 目录下的例程,编译后可以直接执行看效果
1 | $ cd ../../samples |
4. 例程
1) 功能
显示一幅图片(最基本的流程,大多数变换都可在此基础上通过添加函数实现)
2) 代码
1 | #include <stdio.h> |
3) 编译执行
1 | $ g++ test.cpp -o test `pkg-config --cflags --libs opencv` |
5. 参考
《学习 OpenCV》中文版(清华大学出版杜)