一、Opencv 各个库(2.2以上)
- opencv_imgproc模块,包含图像处理函数。
- opencv_core模块,包含核心功能,尤其是底层数据结构和算法函数。
- opencv_highgui模快, 包含读写图像及视频的函数,以及操作图像用户界面函数。
- opencv_features2d模块,包含兴趣点监测子、描述子以及兴趣点匹配框架。
- opencv_calib3d模块,包含相机标定、双目几何估算以及立体视觉函数。
- opencv_video模块,包含运动估算、特征跟踪以及前景提取函数与类。
- opencv_objdetect模块,包含物体检测函数,如脸部与行人检测。
库中还包含其他的工具模块,如机器学习(opencv_ml)、计算机几何(opencv_flann),第三方代码(opencv_contrib)、废弃的代码(opencv_legacy)及GPU加速过的代码(opencv_gpu)。这些模块都有一个单独的头文件(位于include文件夹)。
二、关于Mat类
- cv::Mat类是用于保存图像以及其他矩阵数据的数据结构。默认情况下,它们的尺寸为0,但是你也可以指定初始尺寸:cv::Mat ima(240,320,CV_8U,cv::Scalar(100));
- 当cv::Mat对象离开作用域后,分配的内存将自动释放。cv::实现了引用计数以及浅拷贝,当图像之间进行复制时,图像数据并没有发生复制,两个对象都指向同一块内存块。引用计数的作用是当所有引用内存数据的对象都被析构后,才会释放内存块。如果希望创建的图像拥有原始图像的崭新拷贝,那么可以使用copyTo()方法。
- OpenCV2引入了崭新的C++接口。之前使用的C函数和数据结构仍然可以使用,其中图像是通过IplImage进行操作的。
将一个IplImage 到 cv::Mat对象
IplImage* iplImage = cvLoadImage("c:\\img.jpg");
cv::Mat image4(iplImage,flase);
cvLoadImage是一个C风格的图像读取函数。cv::Mat对象构造函数中的第二个参数说明不需要进行数据拷贝(设为true意味着得到崭新的拷贝,默认值为false),即IplImage与image4共享一份图像数据。