У меня есть проект c ++, созданный в visual studio 2019. Я скомпилировал и собрал openCV версии 4.2.0 и dlib версии 19.19.0 и использовал его в своем проекте c ++. Мой девиз с использованием opencv и dlib в одном проекте: я хочу сделать обнаружение лица, используя DNN (caffe) в opencv и детектор лица dlib на основе hog + svm (get_frontal_face_detector ()).
Мои обе функции разделены, т.е. detectFaceByOpenCVDNN()
для обнаружения лиц на основе opencv и detectFaceBydlibHOG()
для детекторов на основе dlib HOG + SVM.
Я добавил каталог включений обоих проектов, каталоги lib (дополнительные каталоги библиотек) и упомянул дополнительные зависимости с файлами .lib.
Сборка этого проекта успешна и генерирует .lib файл. Используя этот файл, другое консольное приложение c ++ вызывает detectFaceByOpenCVDNN()
(детектор лица opencv).
Код detectFaceByOpenCVDNN()
:
#include <opencv2/imgcodecs.hpp>
#include <opencv2/dnn/dnn.hpp>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/gui_widgets.h>
#include <dlib/image_io.h>
using namespace dlib;
using namespace std;
using namespace cv::dnn;
void namespace_name::FaceDetection::detectFaceByOpenCVDNN(std::string filename)
{
Net net;
cv::Mat frame = cv::imread(filename);
if (frame.empty())
throw std::exception("provided image file is not found or unable to open.");
int frameHeight = frame.rows;
int frameWidth = frame.cols;
.... // code continues
}
Когда я получаю эту функцию, я получаю исключение как " предоставленный файл изображения не найден или не может быть открыт. " который бросается, если frame.empty()
возвращает true. Никаких других исключений на консоли не отображается.
При копании всего, что делает этот сбой, я узнал, что, если я удаляю запись dlib19.19.0_debug_32bit_msvc1924.lib
из Свойства-> Компоновщик-> Ввод-> Дополнительные зависимости, то frame.empty()
возвращает false и программа продолжается.
Но я до сих пор не понимаю, почему cv :: imread () завершается неудачно, когда я использую opencv и dlib в одном проекте c ++?