opencv 矩阵

opencv 矩阵数据的遍历:单通道

#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv\cxcore.h>
#include <stdlib.h>
#include <stdio.h>
 
int main(int argc, char* argv[])
 
{
        //数据
        float data[18] = 
        {
        1,2,3,4, 5,6,
        7,8,9,10,11,12,
        13,14,15,16,17,18
        };

        //矩阵的声明
        CvMat mat;
		cvInitMatHeader(&mat,3,6,CV_32FC1,data);
        int y ,x;
        
        //对行 进行便利
        for(y=0;y<mat.rows;y++)
        {
               
			//对第y行的 元素进行遍历
                for(x=0;x<mat.cols;x++)
                {
                        float value=cvGetReal2D(&mat,y,x);
                        printf(" %f " ,value);
                }
                printf("\n");
        }        
        return 0;
}

opencv 矩阵数据的遍历:双通道(每2个组成 一个元素

#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv\cxcore.h>
#include <stdlib.h>
#include <stdio.h>
 
int main(int argc, char* argv[])
 
{
        //数据
        float data[18] = 
        {
        1,2,3,4, 5,6,
        7,8,9,10,11,12,
        13,14,15,16,17,18
        };

        //矩阵的声明
        CvMat mat;
		cvInitMatHeader(&mat,3,3,CV_32FC2,data);
        int y ,x;
        
        //对行 进行便利
        for(y=0;y<mat.rows;y++)
        {
               
			//对第y行的 元素进行遍历
                for(x=0;x<mat.cols;x++)
                {
                        CvScalar value=cvGet2D(&mat,y,x);
                        printf("(%f %f) " ,value.val[0],value.val[1]);
                }
                printf("\n");
        }        
        return 0;
}
 

 效果:

 

opencv 矩阵数据的遍历:DEMO

#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv\cxcore.h>
#include <stdlib.h>
#include <stdio.h>
 
int main(int argc, char* argv[])
 
{
        //数据
         float data[18] = 
        {
        1,2,3,4, 5,6,
        7,8,9,10,11,12,
        13,14,15,16,17,18
        };

        //矩阵的声明
        CvMat mat_1Chanel, mat_2Chanel , mat_3Chanel;

        //单通道矩阵
        cvInitMatHeader(&mat_1Chanel,3,6,CV_32FC1,data);

        //2通道矩阵
        cvInitMatHeader(&mat_2Chanel,3,3,CV_32FC2,data);

        //3通道矩阵
        cvInitMatHeader(&mat_3Chanel,3,2,CV_32FC3,data);

        //高维矩阵的创建
        int nd  = 3; //维度  3维的矩阵
        int size[3] = {2,2,2};  //每一维的大小 是2
        CvMatND mat_nd;  //声明高维矩阵
        cvInitMatNDHeader(&mat_nd , 3 , size , CV_32FC1,data); //从数组的数据 创建高维矩阵

        //通过指针访问矩阵的数据
        int y ,x;
        int nChannels = 3;//通道数
        //对行 进行便利

		//
		///单通道遍历
		//
		for(y=0;y<mat_1Chanel.rows;y++)  
        {  
                 
            //对第y行的 元素进行遍历  
                for(x=0;x<mat_1Chanel.cols;x++)  
                {  
                        float value=cvGetReal2D(&mat_1Chanel,y,x);  
                        printf(" %f " ,value);  
                }  
                printf("\n");  
        }
		printf("\n");
		//
		///双通道遍历
		//
		 for(y=0;y<mat_2Chanel.rows;y++)
        {
               
			//对第y行的 元素进行遍历
                for(x=0;x<mat_2Chanel.cols;x++)
                {
                        CvScalar value=cvGet2D(&mat_2Chanel,y,x);
                        printf("(%f %f)  " ,value.val[0],value.val[1]);
                }
                printf("\n");
        }
		 printf("\n");
		//
		///三通道遍历
		//
        for(y=0;y<mat_3Chanel.rows;y++)
        {
                //将指针偏移到第y行 的起始处
                float* p_float = (float*)(mat_3Chanel.data.ptr + y*mat_3Chanel.step) ;
                //对第y行的 元素进行遍历
                for(x=0;x<mat_3Chanel.cols;x++)
                {
                        float value[3];
                         value[0] = *(p_float+x*nChannels); //指针偏移到第y行的第x个元素的起始处
                         value[1] = *(p_float+x*nChannels + 1);
                         value[2] = *(p_float+x*nChannels + 2);
                        printf("(%f %f %f)  " ,value[0],value[1],value[2]);
                }
                printf("\n");
        }



        return 0;
}
 

效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值