OpenCV Introduction
05 Jun 2013OpenCV是一个开源的计算机视觉库,具有模块化。
table(table table-bordered). |_.模块|_.说明| |core|核心模块,包括基本的数据结构,例如cv::Mat。| |imgproc|图像处理模块,包括图像过滤、图像转换、颜色空间转换和直方图等。| |video|视频分析模块,包括运行估计、背景减法和对象跟踪算法等。| |calib3d|基本的多视图几何算法、单一和立体摄像机标定、 对象的姿势估计、 立体声函授算法和元素的三维重建。| |features2d|特征探测器| |objdetect|对象检测,可做人脸识别、汽车识别等对象识别功能。| |highgui|用户界面接口。| |gpu|GPU加速算法。|API概念
cv命名空间
所有的OpenCV类和函数都放在cv命名空间中,因此要使用OpenCV中的类或函数需要使用cv命名空间来访问。
cv::Mat A;
如果与stl或其它库的名称冲突则需要显式命名空间来访问。
cv::log(1) std::log(1)
自动内存管理
OpenCV自动处理所有内存
OpenCV通过引用计数的方式来进行内存自动管理
Mat A(1000, 1000, CV_64F); // 创建一个新的Mat对象 Mat B = A; // B引用A Mat C = B.clone(); // 克隆B赋给C,此时C是一个新对象,操作不会影响到A Mat D; C.copyTo(D); // 拷贝C给D,此时D是一个新的对象,操作不会影响到C
自动释放与分配输出数据
OpenCV 自动释放内存,以及自动分配的内存为输出函数参数的大部分时间。
饱和度算法
cv::uchar是8位无符号整数类型
模块
table(table table-bordered). |_.类型|_.说明|_.对应的枚举值|_.多通道| |uchar|8位无符号整数|CV_8U=0|CV_8UC(n)| |schar|8位有符号整数|CV_8S=1|CV_8SC(n)| |ushort|16位无符号整数|CV_16U=2|CV_16UC(n)| |short|16位有符号整数|CV_16S=3|CV_16SC(n)| |int|32位有符号整数|CV_32S=4|CV_32SC(n)| |float|32位浮点数|CV_32F=5|CV_32FC(n)| |double|64位浮点数|CV_64F=6|CV_64FC(n)|多通道也可以使用CV_MAKETYPE函数来创建,例如 @CV_MAKETYPE(CV_8U, n)@
Mat mtx(3, 3, CV_32F); // 创建3x3浮点矩阵 Mat cmtx(10, 1, CV_64FC2); // 创建10x1双通道浮点矩阵,10元素复杂向量 Mat img(Size(1920, 1080), CV_8UC3); // 创建1920列,1080行的3通道颜色的图像 Mat grayscale(image.size(), CV_MAKETYPE(image.depth(), 1)); // 创建与image同大小,同通道类型的单通道图像
人脸识别算法能适用于8位灰度图像或彩色图像
异常处理
try { ... // call OpenCV } catch( cv::Exception& e ) { const char* err_msg = e.what(); std::cout << "exception caught: " << err_msg << std::endl; }
多线程
OpenCV直接在多线程中访问同一个Mat对象,通过引用计数的方式,达到内存共享。
参考: http://docs.opencv.org/modules/core/doc/intro.html