//-- 验证E=t^R*scale
Mat t_x = ( Mat_<double> ( 3,3 ) <<
0, -t.at<double> ( 2,0 ), t.at<double> ( 1,0 ),
t.at<double> ( 2,0 ), 0, -t.at<double> ( 0,0 ),
-t.at<double> ( 1.0 ), t.at<double> ( 0,0 ), 0 );
clc;clear all;close all
tR=[-0.02879601157010515, -0.5666909361828468, -0.0470095088643612;
0.5570970160413594, -0.04958801046730466, 0.8283204827837464;
-0.009600370724841524, -0.8224266019846687, -0.02034004937801313];
essential_matrix=[-0.0203618550523478, -0.400711003811844, -0.03324074249823884;
0.3939270778216363, -0.03506401846698049, 0.5857110303721021;
-0.006788487241440237, -0.5815434272915688, -0.0143825868448625];
% 验证E=t^R*scale
scale=tR./essential_matrix
scale =
1.4142 1.4142 1.4142
1.4142 1.4142 1.4142
1.4142 1.4142 1.4142
c++中for(auto count : counts)
for ( DMatch m: matches )
将 counts 容器中的每一个元素从前往后枚举出来,并用 count 来表示,类似于Java中的 for each 语句,举个栗子:
#include<iostream>
#include<vector>
using namespace std;
int main() {
int a[] = { 1,2,3,5,2,0 };
vector<int>counts(a,a+6);
for (auto count : counts)
cout<< count<< " ";
cout << endl;
return 0;
}
运行的效果是:
C++中双冒号(::) 和 冒号(:) 的用法
双冒号(::)的用法
表示 “域操作符”
例如:声明了一个类A,在类A中声明一个成员函数void foo(),但没有在类A的声明中给出函数foo的定义,那么在类外定义foo时,就要写成
void A::foo()
表示foo()函数是类A的成员函数。
表示引用成员函数和变量,作用域成员运算符
例如:
System::Math::Sqrt()
相当于
System.Math.Sqrt()
冒号(:)的用法
构造函数后面的冒号
构造函数后面的冒号起分割的作用,是类给成员变量赋值的方法,初始化列表,更适用于const成员变量(冒号{} )
例如:
struct foo{
foo()
:Node("node"), _temp(temp)
{}
};
public:和private:后面的冒号
public:和private:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个public: 或 private: 出现为止。private: 为默认处理。
例如:
public:
int foo(int a){}
private:
int a;
std::string s;
类名冒号后面
类名冒号后面的是用来定义类的继承
例如:
class 派生类名 : 继承方式 基类名
{
派生类的成员
};
继承方式:public,private和protected,默认处理是public
表示机构内位域的定义(即该变量占几个bit空间)
例如:
typedef struct _foo{
int a:4;
int b;
};foo