写这篇文章时,我选择的OpenCV版本是2.4.8。尽管在前面的文章中编译了最新的OpenCV源码,但最新的可能不是稳定版本,写文章的话还是选择一个固定版本为好。在后面的文章中,如果发布了新版本,我会选择使用,总之,写文章时使用的都是最新的稳定版本。
首先应该了解OpenCV 1.x和OpenCV2.x是有很大差别的。OpenCV1.x使用的是C接口,需要手动管理内存,所有的函数都装到单一的库中,在使用时需要将整个巨大的OpenCV库都装入你的程序中。OpenCV2.x引入了新的C++接口,实现了自动内存管理,使用新的图像数据结构Mat代替了就得CvMat和IplImage,并且将功能进行分模块,所以OpenCV2.x是由很多模块组成的,这样在使用时只需要引入需要的库即可。
在写程序时,用到什么功能就需要包含进相应的头文件。所有的头文件都在/include/opencv2文件夹找到,这里列举一些比较重要的:
#include "opencv2/core/core_c.h" #include "opencv2/core/core.hpp" #include "opencv2/flann/miniflann.hpp" #include "opencv2/imgproc/imgproc_c.h" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/photo/photo.hpp" #include "opencv2/video/video.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/calib3d/calib3d.hpp" #include "opencv2/ml/ml.hpp" #include "opencv2/highgui/highgui_c.h" #include "opencv2/highgui/highgui.hpp" #include "opencv2/contrib/contrib.hpp"
如果不知道引入什么头文件,那么就使用
#include <opencv2\opencv.hpp>
下面简单介绍一下各个模块的作用:
- core:通过名字就可以看出它是核心模块,定义了基本的数据结构和算术函数;
- imgproc:该模块包括了线性和非线性的图像滤波,图像的几何变换,颜色空间转换,直方图处理等等;
- video:该模块包括运动估计,背景分离,对象跟踪;
- highgui:视频捕捉、图像和视频的编码解码、图形交互界面的接口;
- calib3d:基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建;
- features2d:显著特征检测,描述,特征匹配;
- objdetect:物体检测和预定义好的分类器实例(比如人脸,眼睛,面部,人,车辆等等);
- ml:机器学习模块(SVM,决策树,Boosting等等);;
- gpu:利用GPU对OpenCV模块进行加速算法;
- contrib:实现了多种目标跟踪算法,包括featuretracker、hybridtracker和detection_based_tracker等;
OpenCV所有的类和函数都在cv命名空间下,在使用时有2种方式。
- 在include头文件之后使用using namespace cv
#include "opencv2/core/core.hpp" using namespace cv; int main() { Mat frame = cvQueryFrame(capture); imshow("Video", frame); }
- 在OpenCV类,函数,数据结构之前加上域操作符cv::
#include "opencv2/core/core.hpp" int main() { cv::Mat frame = cvQueryFrame(capture); cv::imshow("Video", frame); }
本篇文章大体了解了一下OpenCV的组成,以及在使用时的一些简单的用法,稍微了解即可,下一篇文章说一下OpenCV最重要的数据结构Mat。
博主加油呀 ,深入浅出很好的。不过我没学过c++,希望楼主说的 越通俗越好~~
我会尽力写的通俗易懂的,不过语言不应该是学习OpenCV的阻碍