用固定数据创建一个Opencv矩阵并访问其数据元素
2015-05-25 09:04
260 查看
今天学习opencv基本数据类型的时候,利用固定数据创建一个Opencv矩阵
在VC6.0,opencv1.0版本中,弹出错误 error C2100: illegal indirection,貌似是由于使用宏而出错,具体原因没有查到,在此处记录,如果以后学习中解决了此问题,会更改
下面是通过函数cvGetND和cvPtrND,直接得到矩阵元素
/*对上面函数说明如下*/
对于cvPtrND()来说,第二个参数是一个指向一个整型数组的指针,这个数组中包含索引的合适数字(个人理解就是索引号)
结构举例
uchar * cvPtr2D(
const CvArr *arr,
int index0,
int index1,
int * type=NULL
);
而关于cvGetND函数,使用方法与cvPtrND类似,需要注意的是,cvGetND函数返回的是CvScalar类型数据。这意味着在使用这些函数的时候,会有很大的空间浪费,所以,只有自己认为用这些函数比较方便和高效率的时候才使用他们,一般最好用cvPtrND
出现错误后首先了解关于opencv中的基本数据类型如下,同时需要注意的是cvInitMatHeader函数数据类型必须为单通道的。
类:DataType
OpenCV原始数据类型的特征模版。OpenCV的原始数据类型包括unsigned char、bool、signed char、unsigned short、signed short、int、float、double以及由这些基础类型组成的元组,这些元组中的所有值都属于相同的类型。这个原始数据类型列表中的所有类型都可以使用一个标示符进行表示CV_<bit-depth>{U|S|F}C(<number_of_channels>),例如,uchar
~ CV_8UC1,3元素的浮点元组~ CV_32FC3,等等。一个一般的OpenCV结构体能够被存储到一个单独的实例中,例如一个原始数据类型Vec。多个实例可以被存储在std::vector、Mat、Mat_、SparseMat、OparseMat_或其他可以保存Vec实例的容器中。
DataType类主要用来为原始数据类型提供描述,同时它不会给对应的类加入子段和方法(实际上不可能修改C/C++的原始数据类型)。这个技术依赖于C++的类特性。DataType本身并不会被使用,但是他的特殊版本会被使用。
float vals[ ]={0.86,-0.50,0.50,0.86}; CvMat rotmat; cvInitMatHeader(&rotmat,2,2,CV_32FC1,vals); float a=CV_MAT_ELEM(*rotmat,float,1,1);
在VC6.0,opencv1.0版本中,弹出错误 error C2100: illegal indirection,貌似是由于使用宏而出错,具体原因没有查到,在此处记录,如果以后学习中解决了此问题,会更改
下面是通过函数cvGetND和cvPtrND,直接得到矩阵元素
#include "cxcore.h" #include "cv.h" #include "stdio.h" int main() { float vals[ ]={1,2,2,6}; CvMat rotmat; cvInitMatHeader(&rotmat,2,2,CV_32FC1,vals); /*下面这两种访问方式都可以成功得到矩阵元素*/ // float a=(cvGet1D(&rotmat,2)).val[0]; float *a=(float *)cvPtr1D(&rotmat,2); printf("%f",*a); return 0; }
/*对上面函数说明如下*/
对于cvPtrND()来说,第二个参数是一个指向一个整型数组的指针,这个数组中包含索引的合适数字(个人理解就是索引号)
结构举例
uchar * cvPtr2D(
const CvArr *arr,
int index0,
int index1,
int * type=NULL
);
而关于cvGetND函数,使用方法与cvPtrND类似,需要注意的是,cvGetND函数返回的是CvScalar类型数据。这意味着在使用这些函数的时候,会有很大的空间浪费,所以,只有自己认为用这些函数比较方便和高效率的时候才使用他们,一般最好用cvPtrND
出现错误后首先了解关于opencv中的基本数据类型如下,同时需要注意的是cvInitMatHeader函数数据类型必须为单通道的。
类:DataType
OpenCV原始数据类型的特征模版。OpenCV的原始数据类型包括unsigned char、bool、signed char、unsigned short、signed short、int、float、double以及由这些基础类型组成的元组,这些元组中的所有值都属于相同的类型。这个原始数据类型列表中的所有类型都可以使用一个标示符进行表示CV_<bit-depth>{U|S|F}C(<number_of_channels>),例如,uchar
~ CV_8UC1,3元素的浮点元组~ CV_32FC3,等等。一个一般的OpenCV结构体能够被存储到一个单独的实例中,例如一个原始数据类型Vec。多个实例可以被存储在std::vector、Mat、Mat_、SparseMat、OparseMat_或其他可以保存Vec实例的容器中。
DataType类主要用来为原始数据类型提供描述,同时它不会给对应的类加入子段和方法(实际上不可能修改C/C++的原始数据类型)。这个技术依赖于C++的类特性。DataType本身并不会被使用,但是他的特殊版本会被使用。
相关文章推荐
- OpenCV-用固定数据创建一个opencv矩阵,并输出
- 学习opencv第三章 基本数据类型 ,矩阵创建,操作,访问
- opencv累加一个三通道矩阵的所有元素(结果绝对正确)
- openCV 图像和矩阵的创建和访问
- OpenCV中矩阵数据的访问(一)(Learning OpenCV第三章2)
- opencv学习_16(CvMat矩阵结构以及矩阵数据访问)
- opencv2.x新数据结构cv::Mat访问元素的方法
- opencv学习(七)Mat函数(数据储存结构 /多种初始化创建方式/ 输出矩阵内容),,其他数据结构存放形式
- 查找一个list中各个数组的元素在一个固定数组中的位置, 并把位置信息记录到一个矩阵里
- oracle授权另外一个用户访问自己创建的数据对象
- 编写程序从标准输入设备读入的元素数据建立一个int型vector对象,然后动态创建与该vector大小一致的数组,把vector对象的所有元素复制给该数组
- opencv2.x新数据结构cv::Mat访问元素的方法
- opencv 创建一个矩阵
- oracle授权另外一个用户访问自己创建的数据对象
- opencv学习笔记(七)-CvMat矩阵结构以及矩阵数据访问
- OpenCV学习——一个多维数组(矩阵)和一个一维,但是包含高维数据的数组之间的区别
- oracle授权另外一个用户访问自己创建的数据对象
- OpenCV--用读取矩阵,访问图像数据
- opencv中的多通道矩阵CvMat元素的访问
- oracle授权另外一个用户访问自己创建的数据对象