情况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参数进行传递:

if (!sgm.Initialize(width, height, sgm_option)) 

最终在Initialize成员函数中将成员属性赋值:

 1 // 影像尺寸 2 width_ = width; 3 height_ = height; 

posted on 2022-09-26 16:17  小凉拖  阅读(62)  评论(0编辑  收藏  举报