情况1:
该成员属性的值是某成员函数中计算的结果:
在SemiGlobalMatching.h(130)的SemiGlobalMatching类中定义一个成员属性(可以私有化)
1 void* census_left_;
在SemiGlobalMatching.cpp(63)的成员函数“SemiGlobalMatching::Initialize”初始化这个成员属性,给它该有的内存空间
1 census_left_ = new uint64[img_size]();
在SemiGlobalMatching.cpp(219)的成员函数“SemiGlobalMatching::CensusTransform”中使用这个成员属性,并在“SemiGlobalMatching::CensusTransform”函数体中给它赋值
1 sgm_util::census_transform_9x7(img_left_, static_cast<uint64*>(census_left_), width_, height_);
这样做的好处是提高算法的效率,节约资源,我们只需要开辟一次census_left_的内存空间,这样在多个成员函数中就可以直接使用,或者直接赋值,不必重复开辟相同的内存空间
情况2:
该成员属性需要在主函数中给它赋值:
1 //主函数中读取图像数据并获取图像的长和宽并给它赋给width和height 2 const sint32 width = static_cast<uint32>(left_gaussin.cols); 3 const sint32 height = static_cast<uint32>(right_gaussin.rows);
//上面定义好的width和height作为Initialize参数进行传递:
1 if (!sgm.Initialize(width, height, sgm_option))
最终在Initialize成员函数中将成员属性赋值:
1 // 影像尺寸 2 width_ = width; 3 height_ = height;