OpenCV не может ссылаться на расширенные модули - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь настроить OpenCV в Ubuntu 16.04 с C ++.Мне удалось заставить программу работать с модулями OpenCV по умолчанию, но у меня возникли трудности с расширенными модулями.Например, я хочу использовать следующий код для генерации суперпикселей:

#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ximgproc/slic.hpp>
#include <opencv2/core/cvstd.hpp>
#include <opencv2/ximgproc.hpp>

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <vector>
#include <float.h>

using namespace std;
using namespace cv;

int main( int argc, char* argv[] ) {
  Mat *image;
  *image = imread("shoe.jpg" , cv::IMREAD_COLOR);
  Ptr<ximgproc::SuperpixelSLIC> ptr =
                    ximgproc::createSuperpixelSLIC(*image,100,10, 10.0f);
}

Когда я компилирую с этой строкой:

g++ -std=c++11 main.cpp  -o output `pkg-config --cflags --libs opencv`

Я получаю следующую ошибку:

/tmp/ccnStIaV.o: In function `main':
main.cpp:(.text+0x187): undefined reference to `cv::ximgproc::createSuperpixelSLIC(cv::_InputArray const&, int, int, float)'
collect2: error: ld returned 1 exit status

Я считаю, что это проблема с файлом opencv.pc в моем файле pkgconfigs.По какой-то причине, когда я собираю расширенные модули, файл opencv.pc не изменяется, чтобы включить ximgproc и другие модули.Когда я запускаю команду pkg-config --libs opencv, я получаю те же библиотеки, что и при установке только базовой версии OpenCV:

/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so -lopencv_calib3d /usr/lib/x86_64-linux-gnu/libopencv_contrib.so -lopencv_contrib /usr/lib/x86_64-linux-gnu/libopencv_core.so -lopencv_core /usr/lib/x86_64-linux-gnu/libopencv_features2d.so -lopencv_features2d /usr/lib/x86_64-linux-gnu/libopencv_flann.so -lopencv_flann /usr/lib/x86_64-linux-gnu/libopencv_gpu.so -lopencv_gpu /usr/lib/x86_64-linux-gnu/libopencv_highgui.so -lopencv_highgui /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so -lopencv_imgproc /usr/lib/x86_64-linux-gnu/libopencv_legacy.so -lopencv_legacy /usr/lib/x86_64-linux-gnu/libopencv_ml.so -lopencv_ml /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so -lopencv_objdetect /usr/lib/x86_64-linux-gnu/libopencv_ocl.so -lopencv_ocl /usr/lib/x86_64-linux-gnu/libopencv_photo.so -lopencv_photo /usr/lib/x86_64-linux-gnu/libopencv_stitching.so -lopencv_stitching /usr/lib/x86_64-linux-gnu/libopencv_superres.so -lopencv_superres /usr/lib/x86_64-linux-gnu/libopencv_ts.so -lopencv_ts /usr/lib/x86_64-linux-gnu/libopencv_video.so -lopencv_video /usr/lib/x86_64-linux-gnu/libopencv_videostab.so -lopencv_videostab

Полагаю, я могу зайти в файл opencv.pc и вручную добавить всерасширенные пути к модулям, но тот факт, что это не было сделано автоматически, подсказывает мне, что я делаю что-то не так во время установки.

Буду очень признателен за любые советы по этой проблеме.Я застрял на этой установке в течение последних нескольких дней и хотел бы приступить к обработке изображений:)

1 Ответ

0 голосов
/ 26 февраля 2019

Извините, ребята допустили глупую ошибку во время закапывания.

Я забыл убедиться, что версия расширенных модулей совпадает с версией базовой библиотеки OpenCV.Убедитесь, что они имеют одинаковую версию.

Для справки: если вы строите из репозиториев Github, вы должны запустить git checkout x.x.x в opencv и opencv_contrib.Оба «xxx» должны быть одинаковыми.

...