您的位置:首页 > 运维架构

图像处理之_OpenCV入门

2017-06-01 17:47 225 查看

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-devapt-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》中文版(清华大学出版杜)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv 图像处理
相关文章推荐