C++ 使用未定义的类型&x27;dlib::图像特征<;图像类型>';使用dlib::正面探测器时出错
我正在使用dlib的最新版本,并尝试构建一个DLL,该DLL使用其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::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路径,并将dlibssource.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