分享

访问CvMat数据块(矩阵维度与通道)

 absolutely113 2013-07-19
通过opencv的函数来访问矩阵的数据

cvGet*D,cvSet*D

cvGetReal1D, cvGetReal2D, cvGetReal3D, cvGetRealND
cvGet1D, cvGet2D, cvGet3D, cvGetND
cvSet*D,也有相应的函数系列
这些函数的缺点是,效率低

Real表示对单通道矩阵的访问,没有Real的表示对多通道矩阵的访问

从数据创建矩阵

 //数据
                 float data[18] =
                {
                                30,60,40,60, 50,40,
                                67,88,55,33, 22,97,
                                59,69,32,46, 25,45
                };

(1)单通道,可以想象有这样一个矩阵
访问CvMat数据块(矩阵维度与通道)
 
(2)双通道(理解为一个元素包含两个数字)

访问CvMat数据块(矩阵维度与通道)
 
 
可以理解为这样一个矩阵
二通道矩阵可以理解为拆分为两个单通道的矩阵
 
访问CvMat数据块(矩阵维度与通道)

 
(3)三通道

访问CvMat数据块(矩阵维度与通道)


 
维 体现为它的坐标
 
代码:
 
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
//#include "cxtypes.h"

int main(int argc, char* argv[])
{
                 //数据
                 float data[18] =
                {
                                30,60,40,60, 50,40,
        67,88,55,33, 22,97,
        59,69,32,46, 25,45
                };

                CvMat mat;
                 //三行六列单通道
                 //cvInitMatHeader(&mat,3,6,CV_32FC1,data);
                 //三行三列双通道
                 //cvInitMatHeader(&mat,3,3,CV_32FC2,data);
                 //三行二列三通道
                cvInitMatHeader(&mat,3,2,CV_32FC3,data);

                 

                 for (int y=0;y<mat.rows;y++)
                {
                                 for (int x=0;x<mat.cols;x++)
                                {
                                                 //取矩阵里面的行列
                                                 //float value = cvGetReal2D(&mat,y,x);
                                                CvScalar value = cvGet2D(&mat,y,x);
                                                 //CvScalar value = cvGetReal3D(&mat,z,y,x);
                                                printf( "(%f  %f  %f) " ,value.val[0],value.val[1],value.val[2]);
                                }
                                printf( "\n" );
                }

                 return 0;
}


 
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多