C++ 使用未定义的类型&x27;dlib::图像特征<;图像类型>';使用dlib::正面探测器时出错

C++ 使用未定义的类型&x27;dlib::图像特征<;图像类型>';使用dlib::正面探测器时出错,c++,dlib,C++,Dlib,我正在使用dlib的最新版本,并尝试构建一个DLL,该DLL使用其dlib::frontial_face_检测器和dlib::shape_predictor预测器检测人脸。然而, 尝试使用检测器时,只需执行以下操作: autofaces=this->detector(img,0); 我发现这个编译错误: Severity Code Description Project File Line Suppression State Error C2146 syntax

我正在使用dlib的最新版本,并尝试构建一个DLL,该DLL使用其
dlib::frontial_face_检测器
dlib::shape_predictor预测器
检测人脸。然而, 尝试使用
检测器时,只需执行以下操作:

autofaces=this->detector(img,0);
我发现这个编译错误:

Severity    Code    Description Project File    Line    Suppression State
Error   C2146   syntax error: missing ';' before identifier 'pixel_type'    Test    D:\Codes\Dependencies\include\dlib\image_processing\scan_fhog_pyramid.h 601 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    Test    D:\Codes\Dependencies\include\dlib\image_processing\scan_fhog_pyramid.h 601 
Error   C2027   use of undefined type 'dlib::image_traits<image_type>'  Test    D:\Codes\Dependencies\include\dlib\image_processing\scan_fhog_pyramid.h 601 
我使用的是dlib 19.21,我包括了它的include路径,并将dlibs
source.cpp
添加到我的dll项目中,然后像这样构建我的项目。 这些也是我的构建选项:

/D_TEST_BUILD_DLL  /bigobj 
为什么我会看到这个错误?我错过了什么

更新:
在不使用任何其他库(如torch)的情况下,这种情况再次发生。因此,这与任何其他库无关。这是纯dlib/opencv

该错误有点误导性,问题是由于将
cv::Mat
馈送给
dlib::get_front_face_detector()
dlib::shape_predictor
对象而导致的。将其转换为预期类型解决了问题:

dlib::array2d img\u dlib;
dlib::assign_image(img_dlib,dlib::cv_image(img));
自动面=此->检测器(img_dlib,0);
更具体地说,当我们将输入图像转换为灰度时,我们可以简单地使用
cv\u image

dlib::array2d img\u dlib;
dlib::assign_image(img_dlib,dlib::cv_image(img));
自动面=此->检测器(img_dlib,0);
旁注 实际上,我花了14个小时才找到我最初发布的相同解决方案,因为我完全错过了
dlib::shape_预测器的输入,因为当我将探测器输入从
cv::Mat
更改为
dlib::array2d
时,错误仍然存在!我认为情况并非如此,于是开始了14小时的马拉松式的建设和重建,以不同的风格,使用不同的方法,最终达到这一点

因此,根据经验,为所有与dlib相关的方法、dlib阵列2d提供数据!我不知道发生这种情况时为什么它不发出编译错误。 如果dlib在这种情况下专门发布错误,我们就不会面临这样的问题

以下是构建dlib并在VisualStudio中使用它的示例方法(在我的例子中,我使用它来创建DLL):


请摘录并提供答案,如果没有答案,您的问题将脱离主题。无论是否提供mre,该问题都不会脱离主题。在这种情况下,imo不需要它。如果需要,向下投票也无济于事。A是一种确保问题具有一定质量的工具。您的问题缺乏质量,因为未知代码会导致多个错误。这是太多的问号,这就是为什么否决票是合理的。如果你是这里的新用户,我会让你放松一些,但你在这里的时间足够长,可以了解这些事情。@UlrichEckhardt,我不打算在这里与你争论,原因与你刚才提到的相同,我认为没有必要,因为这里显示的大部分代码实际上是负责结果的主要操作。没有一个依赖项会影响所讨论的操作。这是MRE!如果你再看一遍。我刚刚添加了那些额外的信息,以防libs的冲突。正如您所看到的,这个问题只是与缺乏适当的转换有关。不管怎样,谢谢你抽出时间。
/D_TEST_BUILD_DLL  /bigobj