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