单一矩阵的运算
2012-04-26 09:10
169 查看
//运行参数:girl.jpg #pragma comment(lib,"highgui.lib") #pragma comment(lib,"cxcore.lib") #pragma comment(lib,"cv.lib") #pragma comment(lib,"ml.lib") #pragma comment(lib,"cvaux.lib") #pragma comment(lib,"cvcam.lib") #include "cv.h" #include "highgui.h" #include <stdio.h> inline void cvDoubleMatPrint( const CvMat* mat ); inline void cvDoubleMatSet( CvMat* mat,double v ); inline void cvDoubleMatSet( CvMat* mat); inline void cvScalarPrint(const CvScalar& s); int main( int argc, char** argv ) { IplImage* pImg; //声明IplImage指针 if( argc == 2 && (pImg = cvLoadImage( argv[1], CV_LOAD_IMAGE_UNCHANGED)) != 0 ) { // 单一矩阵的运算: CvMat *Ma, *Mb; Ma=cvCreateMat(4,4,CV_32FC1); Mb=cvCreateMat(4,4,CV_32FC1); //cvDoubleMatSet(Ma); cvSetIdentity(Ma); cvTranspose(Ma, Mb); // 转置:transpose(Ma) -> Mb (注意转置阵不能返回给Ma本身) cvDoubleMatPrint(Ma); printf("转置后=====================\n"); cvDoubleMatPrint(Mb); printf("迹:=====================\n"); CvScalar t = cvTrace(Ma); // 迹:trace(Ma) -> t.val[0] cvScalarPrint(t); double d = cvDet(Ma); // 行列式:det(Ma) -> d printf("行列式:%lf=====================\n",d); cvInvert(Ma, Mb); // 逆矩阵:inv(Ma) -> Mb printf("逆矩阵=====================\n"); cvDoubleMatPrint(Mb); cvNamedWindow( "Image", 1 ); // 创建窗口 cvShowImage( "Image", pImg ); // 显示图像 cvWaitKey(0); // 等待按键 cvReleaseMat(&Ma); cvReleaseMat(&Mb); cvDestroyWindow( "Image" ); // 销毁窗口 cvReleaseImage( &pImg ); // 释放图像 return 0; } return -1; } inline void cvDoubleMatPrint( const CvMat* mat ) { int i, j; for( i = 0; i < mat->rows; i++ ) { for( j = 0; j < mat->cols; j++ ) { printf( "%lf ",cvmGet( mat, i, j ) ); } printf( "\n" ); } } inline void cvDoubleMatSet( CvMat* mat,double v ) { int i, j; for( i = 0; i < mat->rows; i++ ) { for( j = 0; j < mat->cols; j++ ) { cvmSet( mat,i,j,v); } } } inline void cvDoubleMatSet( CvMat* mat) { int i, j; double v; for( i = 0; i < mat->rows; i++ ) { for( j = 0; j < mat->cols; j++ ) { v=i*10+j; cvmSet( mat,i,j,v); } } } inline void cvScalarPrint(const CvScalar& s) { printf("\n%f %f %f %f\n",s.val[0],s.val[1],s.val[2],s.val[3]); //CvScalar t = cvTrace(Ma); // 迹:trace(Ma) -> t.val[0] }
相关文章推荐
- OpenCV 中简单矩阵运算总结
- Matlab矩阵运算函数-blkdiag函数
- caffe源码学习(1)-矩阵向量运算
- 对矩阵进行转置运算
- DCT变换及量化的c++实现(基于opencv矩阵运算)
- 线性代数-【2-(3-4)】矩阵及其运算
- 从UIImage的矩阵变换看矩阵运算的原理
- ACM-矩阵之基础运算
- 算法导论28(矩阵运算)
- numpy中的矩阵和数组运算
- 矩阵乘法运算
- 稀疏矩阵的加法、减法、转置运算
- R:向量和矩阵的线性代数运算
- 从UIImage的矩阵变换看矩阵运算的原理
- OpenCV矩阵运算
- 对Tensorflow中的矩阵运算函数详解
- OpenCV跳坑攻略(一)OpenCV之矩阵加减运算
- R: 矩阵运算及常用函数 III - *apply Part I
- 矩阵基础 (3). 分块矩阵的加法和乘法运算
- matlab入门教程七 ----- 矩阵运算&线性方程组&特征值