Я создал приложение MFC C ++ на компьютере под управлением Windows 7, используя Visual Studio 2017, и оно работает нормально.Но, когда я перенесу этот проект на свой домашний компьютер с Windows 10 с той же версией Visual Studio, я получаю сообщение об ошибке во время выполнения, которое, похоже, исходит из библиотеки openCV.Я отлаживал ошибку и считаю, что это конфликт между MFC и openCV.
Проблема начинается здесь.Объект инициализируется, но когда он загружает модель, он ломается.Я отладил объект facemark и обнаружил, что свойство cv :: Algorithm имеет значение «Unable to read memory», которое, как я полагаю, начинается там.
Ptr<Facemark> facemark = FacemarkLBF::create();
facemark->loadModel("lbfmodel.yaml");
facemark-> fit имеет триаргументы.Первым аргументом является изображение, которое представляет собой текущий передаваемый кадр, затем грани, которые являются просто прямоугольником, в котором были обнаружены грани, и ориентиры.Когда эта функция возвращает true, параметр landmarks не получает никаких данных, но когда я запускаю это на моем компьютере с Windows 7, он получает.Вот почему я считаю, что проблема начинается, когда я пытаюсь загрузить lbfmodel, потому что он не может загрузить модель правильно.
std::vector< std::vector<cv::Point2f> > landmarks;
std::vector<Rect> faces;
faces.push_back(face.faceLocation());
// Search for landmarks
if ( facemark->fit(frame, faces, landmarks) )
{
// This function does not work anymore because landmarks is empty.
face.map2DPointsTo3DPoints(landmarks);
Я четыре раза проверил, что все мои библиотеки связаны правильно, и дажеперестроить openCV с помощью cmake и снова связать все зависимости, но это ничего не дало.Я полагаю, что существует некоторый тип конфликта между MFC C ++ и openCV, но я не смог понять это.Буду признателен за любые отзывы или идеи по отладке этого.