У меня есть проект 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()
для детектора на основе HOG + SVM на основе dlib.
Я добавил каталог include обоих проектов, каталоги 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
}
Когда я использую эту функцию, я получаю исключение, поскольку «указанный файл изображения не найден или не может быть открыт». который будет throw, если frame.empty()
вернет true. Никаких других исключений на консоли не отображается.
Пока я просто копал, что делает это неудачным, я узнал, что если я удалю запись dlib19.19.0_debug_32bit_msvc1924.lib
из свойств-> Linker-> Input-> Additional Dependencies, тогда frame.empty()
вернет false, и программа продолжится.
Но я все еще не понимаю, почему cv :: imread () не работает, когда я использую opencv и dlib в одном проекте C ++?
dlib19.19.0_debug_32bit_msvc1924.lib
из дополнительных зависимостей, программа читает изображение. - person Amogh   schedule 28.01.2020imread()
работает должным образом. - person Amogh   schedule 28.01.2020libjpeg-turbod.lib
файл, но в папке lib Dlib я вижу толькоdlib19.19.0_debug_32bit_msvc1924.lib
файл. Означает ли это, что сборка Dlib без libjpeg? - person Amogh   schedule 28.01.2020DLIB_JPEG_SUPPORT
по умолчанию, поэтому dlib также строится статически с libjpeg и, следовательно, возникает конфликт. Спасибо чувак!! Я не думаю, что без этой помощи, я один, я смог бы его отследить. - person Amogh   schedule 28.01.2020