Erreur OpenTLD MatLAB mex, bibliothèque OpenCV

2

J'utilise Ubuntu 16.04 et la version étudiant de MatLAB R2016b, OpenCV 3.1 installée en suivant ce tutoriel .

J'ai téléchargé le code source de l'algorithme de suivi OpenTLD et j'essaie d'exécuter le fichier compile.m. Je rencontre les erreurs suivantes.

En remarque, j'ai implémenté les modifications qui résolvent le problème lors de la recherche du fichier d'en-tête cv.h

Les définitions étaient

(#include "cv.h")
(#include "highgui.h")

et ont été changés en

(#include <opencv/cv.h>)

L'erreur que je reçois lors de l'exécution de compile.m

Error using mex
/tmp/mex_36621193718999_4249/lk.o: In function `normCrossCorrelation(_IplImage*, _IplImage*, CvPoint2D32f*, CvPoint2D32f*,
int, char*, float*, int, int)':
lk.cpp:(.text+0x1a0): undefined reference to `cvCreateImage'
lk.cpp:(.text+0x1b9): undefined reference to `cvCreateImage'
lk.cpp:(.text+0x1d6): undefined reference to `cvCreateImage'
lk.cpp:(.text+0x214): undefined reference to `cvGetRectSubPix'
lk.cpp:(.text+0x227): undefined reference to `cvGetRectSubPix'
lk.cpp:(.text+0x23b): undefined reference to `cvMatchTemplate'
lk.cpp:(.text+0x274): undefined reference to `cvReleaseImage'
lk.cpp:(.text+0x27d): undefined reference to `cvReleaseImage'
lk.cpp:(.text+0x286): undefined reference to `cvReleaseImage'
/tmp/mex_36621193718999_4249/lk.o: In function `mexFunction':
lk.cpp:(.text+0x323): undefined reference to `cvReleaseImage'
lk.cpp:(.text+0x341): undefined reference to `cvReleaseImage'
lk.cpp:(.text+0x438): undefined reference to `cvCreateImage'
lk.cpp:(.text+0x455): undefined reference to `cvCreateImage'
lk.cpp:(.text+0x4be): undefined reference to `cvCreateImage'
lk.cpp:(.text+0x4dc): undefined reference to `cvCreateImage'
lk.cpp:(.text+0x553): undefined reference to `cvAlloc'
lk.cpp:(.text+0x565): undefined reference to `cvAlloc'
lk.cpp:(.text+0x578): undefined reference to `cvAlloc'
lk.cpp:(.text+0x613): undefined reference to `cvAlloc'
lk.cpp:(.text+0x61e): undefined reference to `cvAlloc'
/tmp/mex_36621193718999_4249/lk.o:lk.cpp:(.text+0x626): more undefined references to `cvAlloc' follow
/tmp/mex_36621193718999_4249/lk.o: In function `mexFunction':
lk.cpp:(.text+0x6c1): undefined reference to `cvCalcOpticalFlowPyrLK'
lk.cpp:(.text+0x73e): undefined reference to `cvCalcOpticalFlowPyrLK'
collect2: error: ld returned 1 exit status


Error in compile (line 77)
    eval(['mex lk.cpp -O' include lib]);
homeStayProg
la source
Ma première pensée est que (depuis que le projet OpenTLD semble être maintenu depuis plusieurs années), il aurait peut-être mieux valu installer la branche 2.x native libopencv-devdu référentiel
steeldriver le 21/02/2017
J'ai utilisé la commande: sudo apt-get install libopencv-dev et ai réexécuté le fichier compile.m, mais les erreurs sont toujours renvoyées. Merci quand même pour vôtre aide. Je continue de penser cependant que quelque chose est incorrect avec les chemins dans le fichier, compile.m, car la dernière bibliothèque OpenCV devrait sûrement avoir ces "fonctions" telles que cvCreateImage?
homeStayProg 21/02/2017

Réponses:

0

Il semble que le fourni compile.msoit câblé pour une version (et un emplacement) particulière d'OpenCV:

if isunix
    disp('Unix');

    include = ' -I/usr/local/include/opencv/ -I/usr/local/include/';
    libpath = '/usr/local/lib/';

    files = dir([libpath 'libopencv*.so.2.2']);

J'ai pu le compiler et le lier sur Ubuntu 16.04 64 bits avec la version libopencv-dev2.4.9 standard du référentiel en apportant les modifications suivantes:

if isunix
    disp('Unix');

    include = ' -I/usr/include/opencv/ -I/usr/include/';
    libpath = '/usr/lib/x86_64-linux-gnu/';

    files = dir([libpath 'libopencv*.so.2.4'])

NB Je n'ai pas essayé de tester les mexa64objets résultants

Steeldriver
la source
Il semblait cependant compiler correctement l'erreur suivante: Fonction non définie ou variable 'lk'. Erreur dans tldInit (ligne 20) lk (0); Erreur dans tldExample (ligne 34) tld = tldInit (opt, []); % entraine le détecteur initial et initialise la structure 'tld' Erreur dans run_TLD (ligne 42) [bb, conf] = tldExample (opt); est maintenant présent. Après quelques recherches, il semble que la compilation incomplète pourrait être la cause de l’impossibilité de localiser la fonction lk?
homeStayProg 21/02/2017
Et j'ai aussi rencontré l'erreur: Erreur lors de l'utilisation de l'extension de fichier inconnue mex '.4'. Il semble qu'après des recherches, cela pourrait être dû à des objets partagés.
homeStayProg 22/02/2017