OpenCV学习 (二) OpenCV基本操…
来源:互联网 发布:学会plc编程工资高吗 编辑:程序博客网 时间:2024/06/06 13:05
【矩阵处理】
1.
因为OpenCV使用C语言来进行矩阵操作,但是用C++的替代方案可以更加高效地完成操作。
在OpenCV中向量被当做是有一个维数为1的N维矩阵。
矩阵按照行—行方式存储,每行4byte(32bit)对齐。
2.
CvMat
其中
Eg:CvMat *M=cvCreateMat(4,4,CV_32FC1);
3.
CvMat
cvReleaseMat(&M);
4.
CvMat*M1=cvCreateMat(4,4,CV_32FC1);
cvMat *M2;
M2=cvCloneMat(M1);
5.
double
CvMat
等价于
CvMat Ma;
cvInitMatHeader(&Ma,3,4,CV_64FC1,a);
6.
CvMat*M=cvCreateMat(4,4,CV_32FC1);
cvSetIdentity(M);
7.
假设我们现在需要访问一个2D浮点型矩阵的第(i,j)个单元
1.
cvmSet(M,I,j,2.0);//设置M的(I,j)位置的值为2.0
t=cvmGet(M,I,j)
2.
CvMat*M=cvCreateMat(4,4,CV_32FC1);
Int
Float *data=M->data.f1;
Data[i*n+j]=3.0;
3.
CvMat*M=cvCreateMat(4,4,CV_32FC1);
Int
Float*data=M->data.f1;
(data+i*step)[j]=3.0;
4.
double a[16];
CvMatMa=cvMat(3,4,CV_64FC1,a);
a[i*4+j]=2.0
【基本运算】
1.
CvMat *Ma,*Mb,*Mc;
cvAdd(Ma,Mb,Mc);
cvSub(Ma,Mb,Mc);
cvMatMul(Ma,Mb,Mc);
2.
CvMat
cvMul(Ma,Mb, Mc);
cvDiv(Ma,Mb,Mc);
cvAddS(Ma,cvScalar(-10.0),Mc);//Ma-10->Mc
3.
double
double
double
CvMatVa=cvMat(3,1,CV_64FC1,va);
CvMatVb=cvMat(3,1,CV_64FC1,vb);
CvMatVc=cvMat(3,1,CV_64FC1,vc);
Doubleres=cvDotProduct(&Va,&Vb);//向量点乘
cvCrossProduct(&Va,&Vb,&vc);//向量叉乘
4.
CvMat * Ma,* Mb;
cvTranspos(Ma,Mb);//转置
CvScalart=cvTrace(Ma);
cvInvert(Ma,Mb);//逆矩阵inv(Ma)->Mb
5.
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);
6.
CvMat*A=cvCreateMat(3,3,CV_32FC1);
CvMat*E=cvCreateMat(3,3,CV_32FC1);
CvMat*I=cvCreateMat(3,1,CV_32FC1);
cvEigenVV(A,E,l);//l=A的特征值(递减顺序)
7.
CVMat*A=cvCreateMat(3,3,CV_32FC1);
标志位使得矩阵U或者V按照转置的形式返回(若不转置可能运算出错)
【OpenCV视频处理】
1.
(1)
(2)
CvCapture*capture=cvCaptureFromCAM(0);
(3)
CvCapture*capture=cvCaptureFromAVI(“infile.avi”);
(4)
IplImage *img=0;
If(!cvGrabFrame(capture)){
}
Img=cvRetrieveFrame(capture);
(5)
cvReleaseCapture(&capture);
2.
(1)
CvQueryFrame(capture);//在读取视频流信息之前,要先执行此操作
int
int
int
int numFrames=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);
fps仅仅对于视频文件有效,但是不太准确
(2)
floatposMsec=cvGetCaptureProperty(capture,CV_CAP_PROP_POS_MSEC):
int posFrames=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES):
floatposRatio=cvGetCaptureProperty(capture,CV_CAP_PROP_POS_AVI_RATIO);
(3)
CvSetCaptureProperty(capture,CV_CAP_PROP_POS_AVI_RATIO,(double)0.9);
3.
(1)
CvVideoWriter*writer=0;
int isColor=1;
int fps=25;
int frameW =640;
int frameH=480;
write=cvCreateVideoWriter(“out.avi”,CV_FOURCC(‘P’,’I’,’M’,’1’),
其他的编码器代号包括:
其它的编码器代号包括: CV_FOURCC('P','I','M','1') = MPEG-1 codecCV_FOURCC('M','J','P','G') = motion-jpeg codec (does not work well)CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec CV_FOURCC('D', 'I','V', '3') = MPEG-4.3 codec CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4codec CV_FOURCC('U', '2', '6', '3') = H263 codec CV_FOURCC('I','2', '6', '3') = H263I codec CV_FOURCC('F', 'L', 'V', '1') = FLV1codec 若编码器代号为 -1,则运行时会弹出一个编码器选择框.
(2)
IplImage *img=0;
Int nFrames=50;
for(i=0;i
{
}
要查看所抓取到的帧画面,在循环中加入下列语句即可:
注意显示的时候cvWaitkey不能小于20ms,否则画面的显示可能出错。
(3)
cvReleaseVideoWriter(&writer);
- OpenCV学习 (二) OpenCV基本操…
- OpenCV 学习笔记
- OpenCV学习笔记(一) OpenCV的概…
- opencv haartraining 分析二:每级…
- opencv haartraining 分析二:每级…
- 兴趣学习: opencv -- 视频读写, 鼠…
- opencv double CV_64FC1 字符串数…
- opencv double CV_64FC1 字符串数…
- 【原创】Cassandra python 基本操…
- (转)OPENCV 函数cvCreateM…
- Python - pyqt 和 opencv
- 兴趣学习: opencv 实现画图程序
- opencv pca
- learning opencv系列
- Android 与opencv
- Android 与opencv
- Opencv 矩阵运算
- ArcGIS for javascript 学习(二)
- OGRE内部渲染循环
- OGRE地形初步
- LOD地形绘制
- 我的博客今天3岁240天了,我领取了…
- OpenCV学习笔记(一) OpenCV的概…
- OpenCV学习 (二) OpenCV基本操…
- 各种希腊字母念法
- DCM,PLL和MMCM的区别
- C#域与属性
- 负熵(看了好久,竟然这么简单,哎!…
- 傅里叶变换与数字图像处理
- [转]图像傅立叶变换的原理和…
- [转]图像傅立叶变换的原理和…
- 霍夫变换(Hough Transform)