[OPENCV] Probleme opencv en compilation static

Fermé
oneirics Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 20 mai 2015 - Modifié par oneirics le 15/05/2015 à 09:19
Sugel Messages postés 4076 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017 - 20 mai 2015 à 16:37
Bonjour à tout le monde !

Je bloque sur un problème depuis maintenant quelques jours. Je vous explique: je suis en train de créer un logiciel de traitement video. Tout marche nickel, sauf que maintenant je veux déployer cette application statiquement. Or dès que je compile en statique, je n'arrive plus à ouvrir les images et vidéos qui pourtant s'ouvraient bien auparavant en mode debug...
Voici mon code simplifé:


void traitement_mouvement::mouvement(String url)
{
qDebug()<<"running app";

VideoCapture capture(url);//Ouverture de la video voulue

if (!capture.isOpened())// Verifie si la video s'est ouverte correctement
{
qDebug()<<"Probleme ouverture video";
qDebug() << QString::fromStdString(url);
}
}


Voila donc la vidéo ne s'ouvre pas et sans aucunes erreurs. J'ai juste le qDebug() qui m'indique que la vidéo ne s'est pas ouverte...
Si quelqu'un a une solution je suis preneur.

Cordialement et merci d'avance !

1 réponse

Sugel Messages postés 4076 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017 725
17 mai 2015 à 10:39
Alors là...
Essaie de caler quelques lignes de debug dans le constructeur de ta classe, mais sinon j'ai pas d'idées !
0
oneirics Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 20 mai 2015
17 mai 2015 à 15:07
Merci pour ta réponse,
En fait je pense que c'est parce que quand je compile opencv, en utilisant cmake, pour avoir des librairies statiques, j'ai un opencv_ffmpeg.dll qui est une librairie dynamique... Le problème c'est que je n'arrive pas a avoir sa version statique: opencv_ffmpeg.a...
0
Sugel Messages postés 4076 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017 725
Modifié par Sugel le 17/05/2015 à 19:00
tu peut la compiler toi-même à partir des sources:
https://github.com/opencv/opencv/tree/master/3rdparty/ffmpeg

remplace le contenu de make.bat par ceci:
set path=c:\dev\msys32\bin;%path% & gcc -Wall -c -o opencv_ffmpeg.o -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -lws2_32 
ar rcs libopencv_ffmpeg.a opencv_ffmpeg.o


Cela devrait marcher.

(PS: ce code ne compile que la version x86)
0
oneirics Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 20 mai 2015
Modifié par oneirics le 18/05/2015 à 10:04
Donc tu veux dire qu'il me suffit de remplacer le contenu de make.bat, et je peux compiler tout ça en utilisant cmake, make, make install ?
Je vais tester cela de suite, merci de ta reponse !

Et c'est une version x86 qu'il me faut donc c'est nickel !

EDIT: laisse tomber ce que je viens de dire, j'avais pas vu le build_win32.txt...
0
oneirics Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 20 mai 2015
18 mai 2015 à 11:41
Par contre maintenant j'ai un autre problème que je n'arrive pas a comprendre, quand je lance le .bat, voici ce qu'il me donne:
In file included from ffopencv.c:1:0:
../../modules/highgui/src/cap_ffmpeg_impl.hpp:71:6: erreur: #error "libswscale is necessary to build the newer OpenCV ffmpeg wrapper"
#error "libswscale is necessary to build the newer OpenCV ffmpeg wrapper"

Avec une liste d'erreurs qui en découle... et pourtant j'ai bien un libswscale.a ...
0
Sugel Messages postés 4076 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017 725
Modifié par Sugel le 18/05/2015 à 17:34
As-tu bien suivi ça ?
https://raw.githubusercontent.com/Itseez/opencv/master/3rdparty/ffmpeg/build_win32.txt

Tu peut toujours essayer de définir à la bourine cette variable à grand coup de
#define  HAVE_FFMPEG_SWSCALE
, histoire de voir si ce n'est pas simplement un #define oublié...

PS: Je me demande si ce n'est pas normalement cmake qui définis ça; du coup, rien d'étonnant à l'absence de ce define.
0