Opencv矩阵的维度与通道

本文通过两个示例详细介绍了如何使用OpenCV库进行矩阵的创建与访问,包括单通道和多通道矩阵的操作方法,以及如何利用cvGetReal2D和cvGet2D函数来获取矩阵中的元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


矩阵与维度通道

1.cvInitMatHeader(&-1,3,6,CV-32FC1,data);创建一个三行六列的矩阵mat-1,并用data数组的初值初始化它,CV-32FC1表示这个矩阵里面的元素是32味float型的,并且是单通道的。

2.单通道用 float value,cvGetReal2D获取行列数和维度, 双通道和三通到用CvScalar, cvGet2D获取行列数和维度(其中D代表维度)。



(单通道)

#include"highgui.h"


int main(int argc, char* argv[])
{
float data[18] =
{
23,34.,56,67,97,98,
13,43,45,65,76,78,
23,45,56,79,90,76
};

CvMat mat;
cvInitMatHeader(&mat, 3, 6, CV_32FC1, data);  // CV_32FC1 是代表的是32位的单通道的  (3*6*1=18)

for (int y = 0; y < mat.rows; y++)
{
for (int x = 0; x < mat.cols; x++)
{

float value = cvGetReal2D(&mat, y, x); // 加Real的就是单通道的访问,这个是一个二维的矩阵,维是代表的一个点用几个坐标表示,  

printf("%f", value);
}
printf("\n");
}
return 0;

}

运行结果如下:

23.00000034.00000056.00000067.00000097.00000098.000000
13.00000043.00000045.00000065.00000076.00000078.000000
23.00000045.00000056.00000079.00000090.00000076.000000



(三通道)

#include "highgui.h"

#include "cv.h"

#include"cxcore.h"
#include"stdio.h"
#include"stdlib.h"

int main(int argc, char* argv[])
{
float data[18] =
{ 30,60,40,48,50,40,
67,65,12,69,28,97,
56,87,99,49,25,45 };
CvMat mat;
cvInitMatHeader(&mat, 3, 2, CV_32FC3, data);     //由于是三通道3×2×3=18  
for (int y = 0; y<mat.rows; y++)
{
for (int x = 0; x<mat.cols; x++)
{
CvScalar value = cvGet2D(&mat, y, x);   //取y行 x列 2维的  
printf("(%f  %f  %f)", value.val[0], value.val[1], value.val[2]);  //每个坐标点打印三个值;并且用括号括起来  
}
printf("\n");
}
return 0;
}

运行结果如下:

(30.000000  60.000000  40.000000)(48.000000  50.000000  40.000000)
(67.000000  65.000000  12.000000)(69.000000  28.000000  97.000000)
(56.000000  87.000000  99.000000)(49.000000  25.000000  45.000000)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值