如何解决 OpenCV C++ 代码中带有“cv::face::LBPHFaceRecognizer”的链接器错误?

How do I resolve the linker error with 'cv::face::LBPHFaceRecognizer' in my OpenCV C++ code?

提问人:Francis RE 提问时间:6/1/2023 最后编辑:Christoph RackwitzFrancis RE 更新时间:6/3/2023 访问量:57

问:

OPENCV C++ 代码中未解析的外部源。cv::face::LBPHFaceRecognizer

我有 OPENCV 代码,它充当训练器,它获取一个充满面部图像的目录。我正在使用 OPENCV contrib 库在 OpenCV 上运行它。我也在最新版本的Visual Studios上运行它。4.2.04.2.0

#include <iostream> 
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <filesystem>
#include <opencv2/opencv.hpp>
#include <opencv2/face.hpp>
#include <opencv2/face/facerec.hpp>
using namespace cv;
using namespace cv::face;
using namespace std;
namespace fs = std::filesystem;

void assurePathExists(const string& path) {
    fs::create_directories(fs::path(path).parent_path());
}

int main() {
    Ptr<LBPHFaceRecognizer> recognizer = LBPHFaceRecognizer::create();
    CascadeClassifier detector;
    detector.load("C:/Users/781932/Downloads/haarcascade_frontalface_default.xml");

    string datasetPath = "C:/Users/781932/Documents/STEMVisageVision";

    vector<Mat> faceSamples;
    vector<int> ids;

    vector<string> imagePaths;
    for (const auto& entry : fs::directory_iterator(datasetPath)) {
        if (entry.is_regular_file()) {
            imagePaths.push_back(entry.path().string());
        }
    }

    for (const auto& imagePath : imagePaths) {
        Mat img = imread(imagePath, IMREAD_GRAYSCALE);
        int id = stoi(fs::path(imagePath).stem().string().substr(1));

        vector<Rect> faces;
        detector.detectMultiScale(img, faces);

        for (const auto& face : faces) {
            faceSamples.push_back(img(face));
            ids.push_back(id);
        }
    }

    recognizer->train(faceSamples, ids);

    string trainerPath = "trainer/trainer.yml";
    assurePathExists(trainerPath);
    recognizer->write(trainerPath);

    return 0;
}

在 VS 中清理和重建解决方案后,很明显代码本身很好,没有错误。但是,我收到有关构建的错误。

Build started...
1>------ Build started: Project: 5_30_Trainer, Configuration: Debug x64 ------
1>5_30_Trainer.obj : error LNK2019: **unresolved external symbol "public: static struct cv::Ptr<class cv::face::LBPHFaceRecognizer> __cdecl cv::face::LBPHFaceRecognizer::create(int,int,int,int,double)" (?create@LBPHFaceRecognizer@face@cv@@SA?AU?$Ptr@VLBPHFaceRecognizer@face@cv@@@3@HHHHN@Z) referenced in function main**
1>C:\Users\781932\source\repos\5_30_Trainer\x64\Debug\5_30_Trainer.exe : fatal error LNK1120: 1 unresolved externals
1>Done building project "5_30_Trainer.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build started at 9:21 AM and took 02.605 seconds ==========

该类似乎有问题。我认为这是一个链接器问题,但我确实将所有内容包含在项目属性中。问题是什么?cv::face::LBPHFaceRecognizer

C++ opencv 未解析外部

评论


答: 暂无答案