第一章 概述
1.OpenCV提供机器学习的库:MLL,可以下载使用。
2.OpenCV的加速:IPP.团队的库(购买)。
3.HTML帮助文档,Wiki/CvAux库(需要自己下载),包括:双目匹配,立体视觉跟踪,物体识别的PCA,Delaunay三角划分网格等。
第三章 openCV入门
1)OpenCV数据结构:
点:CvPoint、CvPoint2D32f、CvPoint3D32f。
图像:大小CvSize(W,H)、感兴趣区域CvRect(x,y,W,H)、图像颜色CvScalar、获取图像像素的BGR,cvGet2D.
图像、矩阵、数组的关系:CvArr(祖父)、CvMat(父)、IplImage(子)。初始化:cvCreateMat(5,5,CV_64FC1)、cvLoadImage()。释放:cvReleaseMat(&..)、cvReleaseImage(&..)。
注意:以上数据结构对应的构造函数都是以小写的“cv”开头,如cvSize.
2)数据结构的存取和访问:
CvMat:
麻烦的方法:用指针访问cvPtr2D、cvPtr3D等,但是麻烦,基本不用,矩阵的颜色访问设置:cvGet2D,cvSet2D等。
方便的方法:处理浮点数单通道:cvmGet,cvmSet设置。
恰当的方法:利用矩阵的初始指针+数据之间的step+数据结构的存储方式直接计算出数据的位置的指针进行访问,指针可以自增自减访问相邻的数据(效率高但是计算不方便)。 如:
const float* ptr=(const float*)(mat->data.ptr + row*mat->step)
IplImage:
同样可以指针访问,如:
uchar *ptr=(uchar*)(image->imageData + y*image->widthStep)
可以设置ROI来限制操作的区域,可以大大提高速度,设置ROI和取消ROI如下:
cvSetImageROI(image,CVRect rect);
cvResetImageROI(image)//取消ROI
矩阵和图像的操作:
很多公式:见书P54,加减乘除,点乘,叉乘,行列式,访问大小,访问值,逻辑操作等。线性分解、求解,特征值,特征向量、协方差、比较等几乎所有的线性代数的操作都有。
图像颜色转化:cvCvtColor。
数据存储:数据的永久存储,读/写矩阵、OpenCV结构、配置与日志文件,读写图像视屏等。OpenCV从磁盘读写都是按照YAML或XML格式进行读/写。
矩阵的读写:cvLoad(), cvSave().
CvMat* A=cvCreateMat(3,3,the_mat_data);
cvSave("myMatrix.xml",&A);
//...
CvMat* B=(CvMat*)cvLoad("myMatrix.xml");
配置文件读/写:其实就是读/写成xml等标识语言,OpenCV有专门的函数来处理,例子P98页,函数在P101页。
3) 内部存储方式(点的数组的存储方式):
假设有十个三维点Pi=(Xi,Yi,Zi),则存到数组中有四种方式:n-by-1(32FC3)、1-by-n(32FC3)、n-by-3(32FC1)、3-by-n(32FC1)。前三种的内部存储顺序一样,后一种不一样(详情见书P47)。
4)绘图:
cvLine//线段
cvCircle//圆
cvEllipse//椭圆,可以使用外接矩形绘制椭圆cvEllipseBox,注意外接矩形结构CvBox2D
cvFillPoly//多边形及其他,
cvPutText//绘制文本