OpenCV undefined ссылка на `cv :: imread (cv :: String const &, int) ' - PullRequest
1 голос
/ 30 мая 2020

Я не могу заставить opencv работать в коде C ++. Я прочитал все похожие вопросы, но не получил свой код для компиляции.

Я установил OpenCV из источника и включил параметр -D OPENCV_GENERATE_PKGCONFIG = ON, и я пытаюсь получить простой пример OpenCV для работает.

Вот код:

    #include <opencv2/core.hpp>
    #include <opencv2/imgcodecs.hpp>
    #include <opencv2/highgui.hpp>
    #include <iostream>
    using namespace cv;
    int main()
    {
        std::string image_path = "/data/000001.jpg";
        Mat img = imread(image_path, IMREAD_COLOR);
        if(img.empty())
        {
            std::cout << "Could not read the image: " << image_path << std::endl;
            return 1;
        }
        imshow("Display window", img);
        int k = waitKey(0); // Wait for a keystroke in the window
        if(k == 's')
        {
            imwrite("starry_night.png", img);
        }
        return 0;
    }

Попытка скомпилировать с помощью: $ / usr / bin / g ++ -g pkg-config --cflags --libs opencv main. cpp вызывает ошибку «неопределенная ссылка» для все вызовы OpenCV: /code/cpp/play/main.cpp:9: неопределенная ссылка на `cv :: imread (cv :: String const &, int) '

Запуск pkg-config --cflags --libs opencv возвращает:

pkg-config --cflags --libs opencv -I / usr / local / include / opencv -I / usr / local / include -L / usr / local / lib -lopencv_stitching -vlopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_ha sh -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_viz -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgpro c -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_high gui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_imgpro c -lopencv_core

Я также попытался собрать код с cmake, используя этот файл:

    set(CMAKE_VERBOSE_MAKEFILE ON)
    cmake_minimum_required(VERSION 3.16)
    project(play)
    set(CMAKE_CXX_STANDARD 14)
    find_package(OpenCV REQUIRED)
    message(STATUS "OpenCV_INCLUDE_DIRS = ${OpenCV_INCLUDE_DIRS}")
    message(STATUS "OpenCV_LIBS = ${OpenCV_LIBS}")
    add_executable(play main.cpp)

Это то, как должен выглядеть OpenCV_LIB ? Должен быть путь?

-- OpenCV_INCLUDE_DIRS = /usr/include;/usr/include/opencv
-- OpenCV_LIBS = opencv_calib3d;opencv_core;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_viz;opencv_aruco;opencv_bgsegm;opencv_bioinspired;opencv_ccalib;opencv_datasets;opencv_dpm;opencv_face;opencv_freetype;opencv_fuzzy;opencv_hdf;opencv_line_descriptor;opencv_optflow;opencv_phase_unwrapping;opencv_plot;opencv_reg;opencv_rgbd;opencv_saliency;opencv_stereo;opencv_structured_light;opencv_surface_matching;opencv_text;opencv_ximgproc;opencv_xobjdetect;opencv_xphoto
-- Configuring done

Спасибо за помощь.

1 Ответ

0 голосов
/ 30 мая 2020

Спасибо за предложения. Джон был прав. Это решило проблему:

g++ -g main.cpp `pkg-config --libs opencv`

pkg-config должен быть после исходных файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...