OpenCV2.3.1学习笔记(1):用vec类型变量构造Mat
来源:互联网 发布:免费tk域名注册网站 编辑:程序博客网 时间:2024/06/14 04:58
文章要说的内容如题:用vec类型变量构造Mat
在OpenCV2.3.1的英文版官方手册的25页有一段实例代码:
std::vector<Point3f> vec;
...
Mat pointMat = Mat(vec). // convert vector to Mat, O(1) operation
reshape(1). // make Nx3 1-channel matrix out of Nx1 3-channel.
// Also, an O(1) operation
t(); // finally, transpose the Nx3 matrix.
// This involves copying all the elements
第一行,当我们利用Mat(vec)来构造了一个Mat类型的后,如果我们直接利用Mat中的Mat.at<float>(i,j)来输出元素的时候,我发现它只是输出了Point3f一个三维空间点的第一个坐标值,那么问题出在什么地方呢?
让我们在Mat pointMat = Mat(vec). 一行按F9插入断点,然后按F11进入程序中去查看真相:
程序进入到了mat.hpp文件中如下图中的位置:
然后我们仔细分析代码:
template<typename _Tp> inline Mat::Mat(const vector<_Tp>& vec, bool copyData)
: flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), //初始化列表
dims(2), rows((int)vec.size()),cols(1), data(0), refcount(0), //初始化列表
datastart(0), dataend(0), allocator(0), size(&rows) //初始化列表
{
if(vec.empty())
return;
if( !copyData )
{
step[0] = step[1] = sizeof(_Tp);
data = datastart = (uchar*)&vec[0];
datalimit = dataend = datastart + rows*step[0];
}
else
Mat((int)vec.size(), 1, DataType<_Tp>::type, (uchar*)&vec[0]).copyTo(*this);
}
如红色部分显示,原来我们构造的Mat类型数据的行数row等于vec.size()。那么因为vec的元素类型是Point3f类型的,所以其实我们产生的Mat的行数就是1.自然当我们利用循环来显示Mat数据时,就只显示出了一个元素,如果想显示三个坐标:那么我们只能利用data(指向真实数据的char*类型指针来操作了)
如下:
cout<<*((float*)pointMat.data)<<endl;
cout<<*((float*)pointMat.data+1)<<endl;
cout<<*((float*)pointMat.data+2)<<endl;
就可以显示Point3f三个坐标系的值了。- OpenCV2.3.1学习笔记(1):用vec类型变量构造Mat
- 用vec类型变量构造Mat(解决一个问题)
- OpenCv2 学习笔记(1) Mat创建、复制、释放
- opencv2学习笔记(一)-Mat - 基本图像容器
- OpenCv2 学习笔记(2) Mat图像显示
- Opencv学习笔记(五):关于OpenCV2中的Mat图像容器
- Opencv2 学习笔记<一>:cv::Mat数据访问方式
- OpenCv2 学习笔记(6) Mat元素访问和效率比较
- OpenCV2学习笔记一:基本图像容器Mat
- OpenCV中Mat 类型学习笔记
- opencv学习笔记(1)Mat
- c++学习笔记之变量和基本类型(1)
- Lua学习笔记1--基本变量类型
- Python学习笔记(变量类型)
- Python学习笔记(一)--变量类型
- OpenCV学习篇1:Mat类构造
- 【OpenCV学习笔记】【类型转换】一(IplImage和cv::Mat的类型相互转换)
- OpenCV2.0以后:Mat类型和CvMat类型的互相转换(附:OpenCV矩阵合并)
- 守护进程 demo程序
- IE无法显示PNG格式图片的解决
- 装饰器设计模式
- c++正则表达式
- mysql外部文件导入
- OpenCV2.3.1学习笔记(1):用vec类型变量构造Mat
- C#-Mysql读写乱码问题(稍修改,日记)
- C++如何在set中插入struct
- (原创)狂战士奥拉夫攻略-详细打法分析
- 彩色成像原理和vonK iies 色适应理论
- Effective C++笔记 5
- 《Windows程序设计》之BITMAP
- ora-19550无法在使用调度程序时使用备份/恢复功能
- 排序算法(1)---插入排序