OPENCV CvMat的使用

前端之家收集整理的这篇文章主要介绍了OPENCV CvMat的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
 
 
  • 综述:
    • OpenCV有针对矩阵操作的C语言函数. 许多其他方法提供了更加方便的C++接口,其效率与OpenCV一样.
    • OpenCV将向量作为1维矩阵处理.
    • 矩阵按行存储,每行有4字节的校整.
  • 分配矩阵空间:
    CvMat* cvCreateMat(int rows,int cols,int type); type: 矩阵元素类型. 格式为CV_<bit_depth>(S|U|F)C<number_of_channels>. 例如: CV_8UC1 表示8位无符号单通道矩阵,CV_32SC2表示32位有符号双通道矩阵. 例程: CvMat* M = cvCreateMat(4,4,CV_32FC1); 
  • 释放矩阵空间: @H_403_45@
    1. CvMat* M = cvCreateMat(4,CV_32FC1);
    2. cvReleaseMat(&M);
  • 复制矩阵: @H_403_45@
    1. CvMat* M1 = cvCreateMat(4,CV_32FC1);
    2. CvMat* M2;
    3. M2=cvCloneMat(M1);
  • 初始化矩阵: @H_403_45@
    1. double a[] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
    2. CvMat Ma=cvMat(3,4,CV_64FC1,a);
  • 另一种方法: 
    @H_403_45@
    1. CvMat Ma;
    2. cvInitMatHeader(&Ma,3,a);
       
  • 初始化矩阵为单位阵: @H_403_45@
    1. CvMat* M = cvCreateMat(4,CV_32FC1);
    2. cvSetIdentity(M); // 这里似乎有问题,不成功
  • 存取矩阵元素

  • 直接存取,假设使用4-字节校正: @H_403_45@
    1. CvMat* M = cvCreateMat(4,CV_32FC1);
    2. int n = M->cols;
    3. float *data = M->data.fl;
    4. data[i*n+j] = 3.0;
  • 直接存取,校正字节任意: @H_403_45@
    1. CvMat* M = cvCreateMat(4,CV_32FC1);
    2. int step = M->step/sizeof (float );
    3. float *data = M->data.fl;
    4. (data+i*step)[j] = 3.0;
  • 直接存取一个初始化的矩阵元素: @H_403_45@
    1. double a[16];
    2. CvMat Ma = cvMat(3,a);
    3. a[i*4+j] = 2.0; // Ma(i,j)=2.0;
  • 矩阵/向量操作

    存取矩阵元素

    矩阵/向量操作

    猜你在找的VB相关文章