OpenCV笔记(六)CvMat结构体初解3

来源:互联网 发布:centos rpm安装jdk1.6 编辑:程序博客网 时间:2024/06/05 16:29

这一小节利用第(三)篇中第三种CvMat结构体创建矩阵的方法,并进行矩阵信息的读取。

首先脑补一下要用到的知识:

1、创建的CvMat类型结构体中,ptr的类型是unsigned char,且ptr中存储的是CvMat结构体中的数据块;

2、创建的CvMat类型结构体中,step的类型是整型,它的值代表ptr中每行所占的字符个数;

一、下面贴上读取通道数为1的矩阵信息读取源程序1:

#include "stdafx.h"#include "cxtypes.h"#include "highgui.h"int main(int argc, char* argv[]){CvMat mat;float data[16] =//初始化所需数组{1, 2, 3, 4, 5, 6, 7, 8,  9,10,11,12, 13,14,15,16};cvInitMatHeader(&mat, 4, 4, CV_32FC1, data);//创建初始化矩阵结构体,4行4列,数据块为数组data,通道数为1,位数为32,类型浮点型for(int y = 0; y < mat.rows; y++){//注意,char占一个字符,float占四个字符,所以要先将指针按char类型移动到下一行行首,再强制转换为float类型指针读出其中所指的值float *p_float = (float *)(mat.data.ptr + y * mat.step);//将数组指针偏移到每行的行首,ptr: unsigned char*for(int x = 0; x < mat.cols; x++){float value = *(p_float + x);//取出当前指针所指值printf("%7.2f", value);}printf("\n");}return 0;}

Ps:未完待续~

0 0