我已使用Visual Studio 2017在Windows 7计算机上构建了MFC C ++应用程序,并且运行良好。但是,当我将此项目移到运行具有相同版本Visual Studio的Windows 10的家用计算机时,在运行时出现错误,该错误似乎来自openCV库。我一直在调试该错误,并认为这是MFC与openCV之间的冲突。
问题从这里开始。该对象已初始化,但是在加载模型时会中断。我已经调试了面部标记对象,并发现cv :: Algorithm属性的值为“无法读取内存”,我相信这是开始的地方。
Ptr<Facemark> facemark = FacemarkLBF::create();
facemark->loadModel("lbfmodel.yaml");
facemark-> fit具有三个参数。第一个参数是一张图像,它是当前正在传递的帧,然后是faces(只是检测到人脸的矩形)和界标。当此函数返回true时,参数界标不会接收任何数据,但是当我在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);
我已经四重检查了我的库是否都正确链接,甚至使用cmake重建了openCV并再次链接了所有依赖关系,但是它什么也没做。我相信MFC C ++和openCV之间存在某种冲突,但是我无法弄清楚。如果您对此有任何反馈或想法,我将不胜感激。