【发布时间】:2017-06-17 03:50:54
【问题描述】:
我是 C++ 课程的初学者并使用 dlib 人脸检测器。在与网络摄像头一起使用的示例代码中,人脸检测和姿势模型在 main 函数中加载,如下所示:
int main(){
frontal_face_detector detector = get_frontal_face_detector();
shape_predictor pose_model;
deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model;
}
但是,我的项目的结构是通过另一个函数而不是示例中的 main 调用 dlib 人脸检测。因此,我需要使模型全局化,以便执行 dlib 的函数知道“检测器”和“姿势模型”是什么,而不必将其作为参数传递给该函数。有没有办法做到这一点?如果我在函数本身中加载模型,那么每次调用函数时都会加载它,从而降低性能。
静态 dlib::frontal_face_detector 检测器; 静态 dlib::shape_predictor 姿势模型;
目前我正在使用“静态”将它们加载到函数本身中,但我不确定这是否是正确的 C++?为问题的奇怪格式道歉,因为这是我在这个论坛上的第一个问题。感谢理解和帮助!! 谢谢
【问题讨论】:
-
函数外的静态。如果在多个文件中,将该变量重新声明为“extern”。您也可以在所有其他源文件包含的标头中执行此操作。来源:learncpp.com/cpp-tutorial/42-global-variables
-
是的,你的用法是正确的:函数内部的静态限制了范围(只有函数可以看到),每次程序运行只有一个实例化,并且在函数第一次运行时会发生实例化叫。但是,如果您有线程程序,则需要互斥锁。如果这些限制不妨碍您遵循您的规范,那么在函数中使用 static 就可以了。
-
感谢 kfmfe04。这有帮助。