Opencv学习笔记与
心得体会
决胜全面小康心得体会学党史心得下载党史学习心得下载军训心得免费下载党史学习心得下载
-2010版
1. 函数命名规则:cvActionTargetMod(…)
2. 矩阵数据类型:CV_
(S|U|F)C 3. 图像数据类型:IPL_DEPTH_(S|U|F)
4. 头文件:cv.h cvaux.h highgui.h cxcore.h
5. 点的表示: CvPoint p = cvPoint(int x, int y);
CvPoint2D32f p = cvPoint2D32f(float x, float y);
CvPoint3D32f p = cvPoint2D32f(float x, float y, float z);
6. 长方形维数表示: CvSize r = cvSize(int width, int height);
CvSize2D32f r = cvSize2D32f(float width, float height);
7. 有偏移量的长方形表示:CvRect r = cvRect(int x, int y, int width, int height);
8. 分配矩阵:CvMat* cvCreateMat(int rows, int cols, int type); 9. 释放矩阵:void cvReleaseMat(CvMat**);
10. 复制矩阵:CvMat* cvCloneMat(CvMat*);
11. 初始化矩阵: double a[] = {1,2,3,4,5,6,7,8,9,10,11,12};
CvMat Ma = cvMat(3, 4, CV_64FC1, a);
或者: CvMat Ma;
cvInitMatHeader(&Ma, 3, 4, CV_64FC1, a); 12. 初始化单位矩阵: CvMat* M = cvCreateMat(4, 4, CV_32FC1);
cvSetIdentity(M);
13. 直接访问矩阵元素: cvmSet(M, i, j, 2, 0);
T = cvmGet(M, i, j);
14. 已知对齐方式的直接访问: CvMat* M = cvCreateMat(4, 4, CV_32FC1);
int n = M->cols;
float* data = M->data.fl;
data[i*n+j] = 3.0;
15. 未知对齐方式的直接访问: CvMat* M = cvCreateMat(4, 4, CV_32FC1);
int step = M->step/sizeof(float);
float* data = M->data.fl;
(data+i*step)[j] = 3.0;
16. 直接访问已初始化矩阵: double a[16];
CvMat Ma = cvMat(3, 4, CV_64FC1, a);
a[i*4+j] = 2.0;
17. 矩阵和矩阵操作: CvMat *Ma, *Mb, *Mc;
cvAdd(Ma, Mb, Mc);
cvSub(Ma, Mb, Mc);
cvMatMul(Ma, Mb, Mc);
18. 矩阵元素之间操作: CvMat *Ma, *Mb, *Mc;
cvMul(Ma, Mb, Mc);
cvDiv(Ma, Mb, Mc);
cvAddS(Ma, cvScalar(-10.0), Mc); 19. 向量乘法操作: double va[] = {1,2,3};
double vb[] = {0,0,1};
double vc[3];
CvMat Va = cvMat(3, 1, CV_64FC1, va);
CvMat Vb = cvMat(3, 1, CV_64FC1, vb);
CvMat Vc = cvMat(3, 1, CV_64FC1, vc);
double res = cvDotProduct(&Va, &Vb); //点乘
cvCrossProduct(&Va, &Vb, &Vc); //叉乘
20. 单个矩阵操作: CvMat *Ma, *Mb;
cvTranspose(Ma, Mb); //转置
CvScalar t = cvTrace(Ma); //对角线和
double d = cvDet(Ma); //行列式
cvInvert(Ma, Mb); //求逆
21. 非齐次线性系统求解: CvMat *A = cvCreateMat(3, 3, CV_32FC1);
CvMat *x = cvCreateMat(3, 1, CV_32FC1);
CvMat *b = cvCreateMat(3, 1, CV_32FC1);
cvSolve(&A, &b, &x);
22. 特征值(对称矩阵): CvMat *A = cvCreateMat(3, 3, CV_32FC1);
CvMat *E = cvCreateMat(3, 3, CV_32FC1); //特征向量
CvMat *I = cvCreateMat(3, 1, CV_32FC1); //特征值
cvEigenVV(&A, &E, &I);
23. 奇异值分解操作: CvMat *A = cvCreateMat(3, 3, CV_32FC1);
CvMat *U = cvCreateMat(3, 3, CV_32FC1);
CvMat *D = cvCreateMat(3, 3, CV_32FC1);
CvMat *V = cvCreateMat(3, 3, CV_32FC1);
cvSVD(A, D, U, V, CV_SVD_U_T|CV_SVD_V_T); 24. 创建及定位窗口: cvNamedWindow(“win1”, CV_WINDOW_AUTOSIZE);
cvMoveWindow(“win1”, 100, 100);
25. 加载图像: IplImage *img = 0;
img = cvLoadImage(filename);
if (!img) printf(“error!”);
26. 显示图像: cvShowImage(“win1”, img);
27. 关闭窗口: cvDestroyWindow(“win1”);
28. 缩放窗口: cvResizeWindow(“win1”, 100, 100);
29. 鼠标事件处理: P69
30. 键盘事件处理: int key;
key = cvWaitKey(0);
31. 拖动条事件处理:
32. 分配图像: IplImage *img = cvCreateImage(CvSize size, int depth, int channels);
33. 释放图像: void cvReleaseImage(IplImage**);
34. 复制图像: IplImage *img2 = cvCloneImage(img1); 35. 设置或得到感兴趣区域ROI: void cvSetImageROI(IplImage *image, CvRect rect);
void cvResetImageROI(IplImage *image);
CvRect cvGetImageROI(const IplImage *image); 36. 设置或得到感兴趣通道COI: void cvSetImageCOI(IplImage *image, int coi); 37. 从文件读图像: img = cvLoadImage(filename, flag);
flag>0时,3通道彩色图像;
flag=0时,单通道灰色图像;
flag<0时,有文件中图像通道数决定;
38. 向文件写图像: if(!cvSaveImage(outfilename, img)) printf(“error!”);
39. 间接访问图像元素:IplImage *img = cvCreateImage(cvSize(640,480), IPL_DEPTH_32F, 3);
CvScalar s;
s = cvGet2D(img, i, j);
printf(“B=%f,G=%f,R=%f”,s.val[0],s.val[1],s.val[2]);
s.val[0]=111;s.val[1]=111;s.val[2]=111;
cvSet2D(img, i, j, s);
40. 直接访问图像元素:IplImage *img = cvCreateImage(cvSize(640,480), IPL_DEPTH_32F, 3);
((uchar*)(img->imageData+i*img->widthStep))[j*img->nChannel+0]=111;
((uchar*)(img->imageData+i*img->widthStep))[j*img->nChannel+1]=112;
((uchar*)(img->imageData+i*img->widthStep))[j*img->nChannel+2]=113; 41. 指针访问: IplImage *img = cvCreateImage(cvSize(640,480), IPL_DEPTH_32F, 3);
int height = img->height;
int width = img->width;
int step = img->widthStep/sizeof(uchar);
int channels = img->nChannels;
uchar *data = (uchar *)img->imageData;
data[i*step+j*channels+k] = 111;
42. 用C++外壳直接访问:P76
43. 灰度图像转换为彩色图像: cvConvertImage(src, dst, flags=0);
44. 彩色图像转换为灰度图像: cvCvtColor(cimg, gimg, CV_BGR2GRAY);
45. 彩色空间转换: cvCvtColor(src, dst, code);
code=CV_2,,=RGB,BGR,GRAY,HSV,YCrCb,XYZ,Lab,Luv,HLS 46. 画矩形: cvRectangle(img, cvPoint(100,100), cvPoint(200,200), cvScalar(255,0,0), 1); 47. 画圆: cvCircle(img, cvPoint(100,100), 20, cvScalar(0,255,0), 1); 48. 画线段: cvLine(img, cvPoint(100,100), cvPoint(200,200), cvScalar(0,255,0), 1); 49. 画多边形: CvPoint curve1[] = {10,10, 10,100, 100,100, 100,10};
CvPoint curve2[] = {30,30, 30,130, 130,130, 150,10};
CvPoint* curveArr[2] = {curve1, curve2};
int nCurvePts[2] = {4, 5};
int nCurves = 2;
int isCurveClosed = 1;
int lineWidth = 1;
cvPolyLine(img, curveArr, nCurvePts, nCurves, isCurveClosed,
cvScalar(0,255,255), lineWigth); 50. 填充多边形:cvFillPoly(img, curveArr, nCurvePts, nCurves, cvScalar(0,255,255));
51. 写字: CvFont font;
double hScale = 1.0;
double vScale = 1.0;
int lineWidth = 1;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX|CV_FONT_ITALIC,
hScale, vScale, 0, lineWidth);
cvPutText(img, “My comment”, cvPoint(200,400), &font, cvScalar(255,255,0));
52. typedef struct CvPoint
{
int x;
int y;
}CvPoint;
inline CvPoint cvPoint(int x, int y);
inline CvPoint cvPointFrom32f(CvPoint2D32f point); 53. typedef struct CvPoint2D32f
{
float x;
float y;
}CvPoint2D32f;
inline CvPoint2D32f cvPoint2D32f(double x, double y);
inline CvPoint2D32f cvPointTo32f(CvPoint point); 54. typedef struct CvPoint3D32f
{
float x;
float y;
float z;
}CvPoint3D32f;
inline CvPoint3D32f cvPoint3D32f(double x, double y, double z); 55. typedef struct CvSize
{
int width;
int height;
}CvSize;
inline CvSize cvSize(int width, int height);
56. typedef struct CvSize2D32f
{
float width;
float height;
}CvSize2D32f;
inline CvSize2D32f cvSize2D32f(double width, double height);
57. typedef struct CvRect
{
int x;
int y;
int width;
int height;
}CvRect;
inline CvRect cvRect(int x, int y, int width, int height);
58. typedef struct CvScalar
{
double val[4];
}CvScalar;
inline CvScalar cvScalar(double val0, double val1, double val2, double val3);
inline CvScalar cvScalarAll(double val0123); inline CvScalar cvRealScalar(double val0);
59. typedef struct CvTermCriteria
{
int type;
int max_iter;
double epsilon;
}CvTermCriteria;
inline CvTermCriteria cvTermCriteria (int type, int max_iter, double epsilon);
CvTermCriteria cvCheckTermCriteria(CvTermCriteria criteria,
double default_eps, int default_max_iters);
60. typedef struct CvMat
{
int type;
int step;
int *refcount;
union
{
uchar *ptr;
short *s;
int *I;
float *fl;
double *db;
}data;
#ifdef __cplusplus
union
{
int rows;
int height;
};
union
{
int cols;
int width;
};
#else
int rows
int cols;
#endif
}CvMat;
61. typedef struct CvMatND
{
int type;
int dims;
int *refcount;
union
{
uchar *ptr;
short *s;
int *I;
float *fl;
double *db;
}data;
struct
{
int size;
int step;
}dim[CV_MAX_DIM]; }CvMatND;
62. typedef struct CvSparseMat {
int type;
int dims;
int *refcount;
struct CvSet* heap;
void **hashtable;
int hashsize;
int total;
int valoffset;
int idxoffset;
int size[CV_MAX_DIM]; }CvSparseMat;
63. typedef struct IplImage {
int nSize;
int ID;
int nChannels;
int alphaChannel;
int depth;
char colorMode[4];
char channelSeq[4];
int dataOrder;
int origin;
int align;
int width;
int height;
struct _IplROI *roi;
struct _IplImage *maskROI;
void *imageld;
struct _IplTileInfo *tileInfo;
int imageSize;
char *imageData;
int widthStep;
int BorderMode[4];
int BorderConst[4];
char *imageDataOrigin; }IplImage;
64. typedef void CvArr;
65. 创建图像头并分配数据:IplImage *img = cvCreateImage(CvSize size, int depth, int channels);
等于: header = cvCreateImageHeader(size, depth, channels);
cvCreateData(header);
66. 分配初始化图象头: IplImage* cvCreateImageHeader(CvSize size, int depth, int channels);
67. 释放图像头: void cvReleaseImageHeader(IplImage** image); 68. 释放图像头和数据: void cvReleaseImage(IplImage** image);
69. 初始化图像头: IplImage* cvInitImageHeader(IplImage* image, CvSize size,int depth,
int channels, int origin=0, int align=4); 70. 完整复制图像: IplImage* cvCloneImage(const IplImage* image); 71. 设置感兴趣通道: void cvSetImageCOI(IplImage* image, int coi); 72. 返回感兴趣通道: int cvGetImageCOI(const IplImage* image); 73. 设置感兴趣区域: void cvSetImageROI(IplImage* image, CvRect rect); 74. 返回感兴趣区域: CvRect cvGetImageROI(const IplImage* image); 75. 释放感兴趣区域: void cvResetImageROI(IplImage* image);
76. CvMat* cvCreateMat(int rows, int cols, int type); 77. CvMat* cvCreateMatHeader(int rows, int cols, int type); 78. void cvReleaseMat(CvMat** mat);
79. CvMat* InitMatHeader(CvMat* mat, int rows, int cols, int type,
void* data=NULL, int step=CV_AUTOSTEP);
80. CvMat cvMat((int rows, int cols, int type, void* data=NULL); 81. CvMat* cvCloneMat(const CvMat* mat);
82. CvMatND* cvCreateMatND(int rows, const int cols, int type); 83. CvMatND* cvCreateMatNDHeader(int rows, int cols, int type); 84. void cvReleaseMatND(CvMatND** mat);
85. CvMat* InitMatNDHeader(CvMatnND* mat, int dims, const int* sizes, int type,
void* data=NULL);
86. CvMat* cvCloneMatND(const CvMatND* mat);
87. 数组数据引用计数减一:void cvDecRefData(CvArr* arr);
88. 数组数据引用计数加一:int cvIncRefData(CvArr* arr);
89. 分配数据: void cvCreateData(CvArr* arr);
90. 释放数据: void cvReleaseData(CvArr* arr);
91. 设置数据: void cvSetData(CvArr* arr, void* data, int step);