zoukankan      html  css  js  c++  java
  • CvMat 矩阵的使用方法和简单程序

    一:CvMat* cvInitMatHeader( CvMat* mat, int rows, int cols, int type,void* data=NULL, int step=CV_AUTOSTEP );
    mat  指针指向要被初始化的矩阵头.
    rows  矩阵的行数.
    cols 矩阵的列数.
    type 矩阵元素类型.
    data 可选的,将指向数据指针分配给矩阵头.
    step 排列后的数据的整个行宽。默认状态下。使用 STEP 的最小可能值。比如假定矩阵的行与行之间无隙

    double a[] = { 1, 2, 3, 4

    5, 6, 7, 8,
    9, 10, 11, 12 };
    double b[] = { 1, 5, 9,
    2, 6, 10,
    3, 7, 11,
    4, 8, 12 };
    double c[9];// c 数组存贮 a(3x4) 和 b(4x3) 矩阵的积
    CvMat Ma, Mb, Mc ;
    cvInitMatHeader( &Ma, 3, 4, CV_64FC1, a );//创建矩阵,按行存储的
    cvInitMatHeader( &Mb, 4, 3, CV_64FC1, b );
    cvInitMatHeader( &Mc, 3, 3, CV_64FC1, c );

    cvMatMulAdd( &Ma, &Mb, 0, &Mc );

    cvReleaseMat(&Ma);

    cvReleaseMat(&Mb);

    cvReleaseMat(&Mc);

    还有一种初始化矩阵:

    double a[] = { 1,   2,   3,   4,

                    5,   6,   7,   8,

    9, 10, 11, 12 };

    CvMat Ma=cvMat(3, 4, CV_64FC1, a);


    二:

    cvMat存储矩阵的方法

    cvGetRealND();返回单通道数组的指定元素

    double cvGetReal1D( const CvArr* arr, int idx0 );
    double cvGetReal2D( const CvArr* arr, int idx0, int idx1 );
    double cvGetReal3D( const CvArr* arr, int idx0, int idx1, int idx2 );
    double cvGetRealND( const CvArr* arr, int* idx );
    arr
    输入数组,必须是单通道.
    idx0
    元素下标的第一个成员,以 0 为基准
    idx1
    元素下标的第二个成员。以 0 为基准
    idx2
    元素下标的第三个成员。以 0 为基准
    idx
    元素下标数组

    返回特殊的数组元素

     cvSetRealND();//改动指定数组元素值

    void cvSetReal1D( CvArr* arr, int idx0, double value );
    void cvSetReal2D( CvArr* arr, int idx0, int idx1, double value );
    void cvSetReal3D( CvArr* arr, int idx0, int idx1, int idx2, double value );
    void cvSetRealND( CvArr* arr, int* idx, double value );
    arr
    输入数组.
    idx0
    元素下标的第一个成员。以 0 为基点
    idx1
    元素下标的第二个成员。以 0 为基点
    idx2
    元素下标的第三个成员,以 0 为基点
    idx
    元素下标数组
    value
    指派的值


    cvGetND();//返回特殊的数组元素 多通道的
    CvScalar cvGet1D( const CvArr* arr, int idx0 );
    CvScalar cvGet2D( const CvArr* arr, int idx0, int idx1 );
    CvScalar cvGet3D( const CvArr* arr, int idx0, int idx1, int idx2 );
    CvScalar cvGetND( const CvArr* arr, int* idx );
    arr
    输入数组.
    idx0
    元素下标第一个以 0 为基准的成员
    idx1
    元素下标第二个以 0 为基准的成员
    idx2
    元素下标第三个以 0 为基准的成员
    idx
    元素下标数组

    cvSetND();//改动指定的数组?多通道的

    void cvSet1D( CvArr* arr, int idx0, CvScalar value );
    void cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );
    void cvSet3D( CvArr* arr, int idx0, int idx1, int idx2, CvScalar value );
    void cvSetND( CvArr* arr, int* idx, CvScalar value );
    arr
    输入数组
    idx0
    元素下标的第一个成员,以 0 为基点
    idx1
    元素下标的第二个成员,以 0 为基点
    idx2
    元素下标的第三个成员,以 0 为基点
    idx
    元素下标数组
    value
    指派的值


    voidcvmSet( CvMat* mat, int row, int col, double value );//设置单通道浮点矩阵的指定元素
    mat
    矩阵.
    row
    行下标,以 0 为基点.
    col
    列下标,以 0 为基点.
    value
    矩阵元素的新值


    doublecvmGet( const CvMat* mat, int row, int col );//返回单通道浮点矩阵指定元素
    mat
    输入矩阵.
    row
    行下标。以 0 为基点.
    col
    列下标,以 0 为基点






    #include "cv.h"  
    #include "highgui.h"  
    #include <stdio.h> 
    #include <math.h>  
    #include <string.h>


    #pragma comment(lib, "cv.lib")  
    #pragma comment(lib, "cxcore.lib")  
    #pragma comment(lib, "highgui.lib")  


    main()
    {  
    CvMat Ma;
    CvMat Mb;
    CvMat *Mc;
    int i,j;
    double a[] = { 1,    2,    3,    4};
    double b[] = { 1,    2,    3,    4 };
    double c[]={0};
    Mc=cvCreateMat(2,2,CV_64FC1);
      Ma=cvMat(2, 2, CV_64FC1, a);  
      Mb=cvMat(2, 2, CV_64FC1, b); 
      //cvTranspose(&Ma, Mc);//Ma的转置存储在Mc中,不能对自己进行转置
      cvMatMul(&Ma, &Mb, Mc);
      cvmSet(Mc,1,1,3);//设置2行2列的值为3
    //cvInitMatHeader(&Ma, 3, 4, CV_64FC1, a,CV_AUTOSTEP);
    for(i=0;i<2;i++)
    for(j=0;j<2;j++)
    printf("%f ",cvGetReal2D(Mc,i,j));
    //printf("%f ",cvGet2D(Mc,i,j));
    }

  • 相关阅读:
    2018暑假假期周进度报告——第八周
    zf-关于评价器的开关所在的配置文件,与代码如何修改。
    不要点击一个功能就创建一个新的网页,要尽量少的新创建页面(例如:办事指南,点击一个部门创建一个网页,选择具体事项时,又创建一个网页,这样创建的网页太多)
    实现jsp页面显示用户登录信息,利用session保存。
    zf-关于更换页面,的各种问题。
    报错 BeanFactory not initialized or already closed
    Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds
    如果在一个实现类中改变另外一个类中的变量,但是怎么改网页上都没变化的问题。
    如果更新包更新包现场,class文件更新过去,没有改变,及时删掉,照样能进那个模块的问题。
    使用内链接(A a inner join B b on a.xx = b.xx)查询2个表中某一列的相同的字段。
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5412262.html
Copyright © 2011-2022 走看看