当前位置: 代码迷 >> 综合 >> 【08】opencv教程笔记08矩阵维数与通道
  详细解决方案

【08】opencv教程笔记08矩阵维数与通道

热度:54   发布时间:2023-10-14 05:14:40.0

//吴锋-优酷-很早的课程-代码可实现

【08矩阵通道与维度】
第一次实验:
#include"stdafx.h"
#include"cv.h"
#include"cxcore.h"
#include"highgui.h"

int main(int argc,char*argv[])//这种方法访问矩阵不是很好,因为调用getRealND要出入站很多次,不适用于大型图片
{
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);//单通道C1 F代表float型,3行6列,第一次是C1,36;第二次是C2,33
for(int y=0;y<mat.rows;y++)//row行
{
 for(int x=0;x<mat.cols;x++)
 {
  float value=cvGetReal2D(&mat,y,x);//real代表单通道,y行x列
printf("%f ",value);
 }
 printf("\n");//内层列数循环完换行
}
return 0;
}
第二次实验:
#include"stdafx.h"
#include"cv.h"
#include"cxcore.h"
#include"highgui.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,2,CV_32FC3,data);//单通道C1 F代表float型,3行6列,第一次是C1,36;第二次是C2,33,real也要改变,单通道有real
for(int y=0;y<mat.rows;y++)//row行
{
 for(int x=0;x<mat.cols;x++)
 {
  CvScalar value=cvGet2D(&mat,y,x);//real代表单通道,y行x列;cvscalar是一个4位数组,val【4】,装BGR和alpha
printf("(%f %f %f)",value.val[0],value.val[1],value.val[2]);
 }
 printf("\n");//内层列数循环完换行
}
return 0;
}