C++版深度图和彩图转点云技术实现总结
主要技术点实现过程中主要技术点1.参数文件的读入2 opencv中矩阵元素的操作3类的定义和继承4C++文件流操作(二进制文件)5动态内存的分配和处理6容器的使用7C++的一些时间操作参数文件的读入校准参数多是以xm或者ym存储的opencv不同版本都提供了Xm和ym的读入方法,比较完整灵活的是类似于文件操作的利用 CVFlleStorage和与之对应的 COPen Files来灵活的操作。如果直接试 opencv输出的数据,则可采用cV较早版本更简单的 cvload来进行读取,将其存入 CVMat数据类型。如读取 Intrinsic时可以简单的:CvMat *INtrinsic=(CyMat)CVLoad(filepath)opencv中矩阵元素的操作opencv中图像像素的操作其实就是对 opencv定义的CVMa或者cv:Mat矩阵的元素操作(1)对于新版的cv:Mat的元素操作,可以通过矩阵自带的at来操作如把参数读进cv∷:Maεt时,cv: Mat intrinsic=(CWMa*) IcVLoad(“path"),如果想访问矩阵中某个元素则可通过InTrinsic.at<数据类型>(行号,列号)来进行操作。假设参数是foat型的,则如果想访问第2行,第3列的元素,则为(C++元素索引从零开始):INtrinsic at (1, 2)opencv中矩阵元素的操作(3)如果读进cv:Mat的彩色图片上,则想访问每个像素点的颜色值时,可以在访问的元素后面指定其通道( channe)来实现如将幅彩色图片通过 imread读进cv: Mat cmg里,则其像素点的红色值为:CImg. at(j)[2]( opencv的颜色通道为BGR)opencv中矩阵元素的操作(3)如果对于旧版的 CVMat的元素操作,可以通过CV MAT ELEM来操作如把参数读进CVMa时,CMat* INtrinsic=( CVMat*) IcVLoad(“path",如果想访问矩阵中某个元素则可通过CV MAT ELEM(* INtrinsic,数据类型,行号,列号)来进行操作。假设参数是 float型的,则如果想访问第2行,第3列的元素,则为(C++元素索引从零开始)CV MAT ELEM(CIntrinsic, float 1,2类的定义和继承类的定义和继承在本程序里主要体现在对相机的定义和点云的定义相机的定义里可以在父类里把深度和彩色的共同成员定义,而对于深度相机,由于其采用逆向模型具有一定的特殊性,所以他在继承相机类的同时,还应有一些自的性质,所以需要在继承父类的同时定义些自己的成员和成员函数定义点云类的目的主要是为了方便存储。类的定义和继承在声明一个类时为了避免头文件的重复引用,最好使用# ifndef宏命令声明类的同时,如果需要自己定义构造函数,需要严格按照格式进行在类的声明和类成员函数的定义时,注意文件结尾的分号C++文件流操作C++的文件流操作方便快捷,使用是包含其相关的头文件即可。十进制的文件操作可以使用″>’,会自动忽略空格和换行,简单方便,不在赘述对于二进制文件的操作,最常见的就是读写文本文件,当打开一个文本文件时,我们可以用read和 write函数方便的对齐进行操作,如当打开一个文件到f时,可以fread(要读入到的变量的地址,读取长度)f write(要写入到的变量的地址,写入长度)
用户评论