2017-01-31 245 views
1

我是C++类的初学者,使用dlib人脸检测器。在与网络摄像头使用的示例代码中,人脸检测和姿势模型加载到主函数中是这样的:全局初始化C++类

int main(){ 
    frontal_face_detector detector = get_frontal_face_detector(); 
    shape_predictor pose_model; 
    deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model; 

}

然而,我的项目的方式构成的,DLIB脸检测如示例中所示,通过另一个函数调用而不是main函数。因此,我需要使模型全局化,以便执行dlib的函数知道“探测器”和“pose_model”是什么,而不必将其作为参数传递给该函数。无论如何要这样做?如果我在函数内部加载模型,那么每次调用函数时都会加载模型,从而降低性能。

static dlib :: frontal_face_detector检测器; static dlib :: shape_predictor pose_model;

目前我正在使用'静态'来加载它们内部的函数本身,但我不知道如果这是正确的C++?对于这个问题的奇怪格式抱歉,因为这是我在这个论坛上的第一个问题。感谢您的理解和帮助! 谢谢

+0

静态函数的外部。如果在多个文件中,则将该变量重新声明为“extern”。您也可以在所有其他源文件包含的标题中执行此操作。来源:http://www.learncpp.com/cpp-tutorial/42-global-variables/ – namar0x0309

+0

是的,你的用法是正确的:一个函数内部的静态限制了范围(只有函数可以看到它),只有一个每个程序运行的实例化,并且实例化将在第一次调用该函数时发生。但是,如果您有线程化程序,则需要互斥锁。如果这些限制不能阻止你遵循你的规范,那么在函数中使用静态是很好的。 – kfmfe04

+0

谢谢kfmfe04。这有助于。 – Ampa08

回答

1

当你像其他全局变量一样初始化它们时,你可以简单地声明它们。

frontal_face_detector detector = get_frontal_face_detector(); 
shape_predictor pose_model; 

int main(){ 

     deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model; 
     ... 
}