Неопределенная ссылка на opencv dnn в QtCreator

#c #opencv #neural-network #qt-creator

#c #opencv #нейронная сеть #qt-creator

Вопрос:

Ошибка

Не удалось связать модуль OpenCV DNN с QtCreator : /home/joseph/Documents/dev/dnn_opencv/utils.cpp:52: ошибка: неопределенная ссылка на `cv::dnn::dnn4_v20200609::Net::Net()

Контекст

Привет, я пытаюсь загрузить некоторые модели с помощью модуля OpenCV DNN (OpenCV 4.4.0), чтобы выполнить некоторую классификацию / сегментацию в рамках более крупного проекта. Для этого я использую QtCreator (5.15.0) и gpp (10.1.0). OpenCV был собран из исходного кода с использованием OpenCV-contrib.

Мой файл .pro выглядит так :

 TEMPLATE = app
CONFIG  = console c  11
CONFIG -= app_bundle
CONFIG -= qt

INCLUDEPATH  = "/usr/local/include/opencv4"

LIBS  = -L"/usr/local/lib/" 
-lopencv_highgui 
-lopencv_imgproc 
-lopencv_core
-lopencv_dnn


SOURCES  = 
    main.cpp 
    utils.cpp

HEADERS  = 
  utils.hpp
  

Проект пока очень прост, я могу запрашивать изображения с помощью OpenCV, так что, похоже, обычные библиотеки найдены. Однако всякий раз, когда я использую что-либо в модуле DNN, у меня возникает эта ошибка: /home/joseph/Documents /dev /dnn_opencv/utils.cpp: 52: ошибка: неопределенная ссылка на `cv::dnn::dnn4_v20200609::Net::Net()
Это происходит при вызове cv::dnn::Net net; с использованием пространства имен или нет.

Я заметил, что в файле / usr /local /include/opencv4 /opencv2/dnn/version.hpp есть флаг #define OPENCV_DNN_API_VERSION 20200609 , который соответствует версии dnn, в которой должен быть найден класс Net, но я не знаю, к чему это может привести меня.

У меня нет большого опыта работы с Qmake и OpenCV, так что это, вероятно, простое исправление, но я был бы признателен за помощь. Спасибо!

Комментарии:

1. вы пробовали запускать свой код в простом консольном проекте?

2. Да, я пытался скомпилировать вручную с помощью g main.cpp utils.cpp -o output pkg-config —cflags —libs opencv`, -lopencv-dnn действительно в —libs, но у меня такая же проблема. На самом деле, всякий раз, когда я пытаюсь выполнить какое-либо прямое распространение, ошибка в сети исчезает, и у меня есть /usr/local/include/opencv4/opencv2/core/cvstd_wrapper.hpp:100:72: error: no matching function for call to ‘std::shared_ptr<cv::Formatted>::shared_ptr(const char*amp;)’ Возможно, что содержимое не было правильно построено, вы знаете, как я мог бы это проверить?

Ответ №1:

Для тех, кто сталкивается с такой же проблемой, мне удалось правильно установить его и использовать в QtCreator, используя графический интерфейс Cmake и проверяя все правильные флаги. Я считаю, что это была ошибка установки, касающаяся модулей OpenCV-contrib. Эта ссылка является хорошим руководством по пометке правильных флагов : https://www.pyimagesearch.com/2018/08/17/install-opencv-4-on-macos /

Кроме того, странная ошибка, с которой я столкнулся в отношении error: no matching function for call to std::shared_ptr<cv::Formatted>::shared_ptr(const char*amp;) , была связана только с вызовом print(...) вместо printf или cout .