C++基本操作积累
本篇主要为积累自己平时遇到的一些操作,我一般情况下都是需要一个功能,先到网上搜索然后copy。甚至有一些常用函数的应用都要到网上搜索一下才会使用。为了提高写代码的效率,决定记录一下C++中经常会使用到的函数操作。
角点检测
goodfeaturetotrack
矩阵中最大值最小值
minmaxLoc
写文件
ofstream out("filename");//直接覆盖
//ofstream out("filename",ios::app);//不覆盖,接着之前的文件写
out<<要写的内容<<endl;
out.close();//关闭文件
或者
ofstream out;
out.open(filanema);//覆盖
//out.open(filename,ios::app);//接着写
out<<内容<<endl;
out.close();
矩阵初始化1
在类中定义一个Mat类型的变量,且希望对其进行赋值,可以:
Mat cameraMatrixL = (Mat_<double>(3, 3) << 856.5164, 0, 316.4297,
0, 854.8775, 198.4684, 0, 0, 1);
数据是从左到右赋值给Mat数据的。
Mat ptr
常用形式:mat.ptr<type>(row)[col]
,访问Mat中的第
r
o
w
row
row行中的第
c
o
l
col
col列元素。返回类型为模板类型指针,< >
中的类型应该与Mat中的数据类型一致。
例如分别读入灰度图片和彩色图片,输出的第一行第二个元素,得到如下 结果
Mat imgL = imread("teddyQ/im2.ppm", 0);
Mat imgR = imread("teddyQ/im6.ppm");
uchar* data00 = imgL.ptr<uchar>(0);
uchar* data10 = imgL.ptr<uchar>(1);
uchar data01 = imgL.ptr<uchar>(0)[1];
cout << (int)data01 << endl;
cv::Vec3b* data000 = imgR.ptr<cv::Vec3b>(0);
cv::Vec3b* data100 = imgR.ptr<cv::Vec3b>(1);
cv::Vec3b data001 = imgR.ptr<cv::Vec3b>(0)[1];
cout << data001 << endl;
如下代码,指针data00+1相当于在行内(也就是一列一列地)移动
uchar* data00 = imgL.ptr<uchar>()+1;
cout << (int)*data00 << endl;
uchar data01 = imgL.ptr<uchar>(0)[1];
cout << (int)data01 << endl;
cv::Vec3b* data000 = imgR.ptr<cv::Vec3b>()+1;
cv::Vec3b data001 = imgR.ptr<cv::Vec3b>(0)[1];
cout << *data000 << endl;
cout << data001 << endl;
输出为:
以上。
访问Mat的元素
访问Mat元素时,无论使用at
访问还是使用ptr
都需要知道Mat中的元素类型,使用Mat.type()
即可得知元素类型
ref:Mat type()