ben je tente un article pour aider ceux qui aurait des problemes avec l'utilisation d'opencv sous linux. le fichier brouillons .odt fait 3 pages

Que ce que opencv

désole mais la question à déjà sa réponse sur un autre tuto du forum. Pour ce document je pars du principe que vous savez ce qu'est opencv. Ceci n'est en rien un cours sur openCV mais sur son installation sous GNU/Linux quand celle-ci pose problème.

Pourquoi cet article

En apprenant à utiliser opencv j' ai souvent rencontré des erreurs non compilation. Et pour les régler j'ai souvent du chercher des heures sur le net ou tout simplement passé des jours à lire les message du groupe opencv sur yahoogroup.
Ce document est juste une aide pour ceux qui rencontreront les mêmes difficultés.

Comment lire ce document

Ce document n'est pas prêt d'être complet car il sera écrit au fur et à mesure que je trouverai des solutions à de nouveau problèmes. Ceci dit passer de temps en temps le redire histoire de voir si rien est nouveau:

Installation automatique:

Il est possible d'installer opencv depuis la plus part des distributions respective en utilisant l'installateur par défaut. Par exemple sous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
fedora : yum install opencv opencv-devel.
         Debian: apt-get install libcv-dev libcv1 libcvaux-dev libhighgui-dev libhighgui1 opencv-doc python-opencv
a l'heure ou est écrit cet article, une telle installation aboutirait a l'installation de opencv-1.0. Honnêtement je ne l'ai jamais réellement testé et je suppose que certains problèmes sont présent. Pour éviter la plus part de ces problèmes je vous recommande donc une installation par les sources.

Installation Manuelle:

Préférer ce type d'installation qui est indépendant de la distribution choisis. Pour ce document on utilisera la version opencv-1.1pre disponible sur sourceforge.
Nous allons installer opencv de 3 manières(pour l'instant) selon les utilisations voulut. Une installation pour une utilisation normale sur les images, une pour lecture de AVI et une dernière pour l'écriture d'AVI. Vous vous demandez mais pourquoi l'installation ne gère pas tout? Ben j'en sais rien.

Installation 1:
allez dans le repertoire ou a ete dearchive opencv:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
  cd ~/vers_cv/opencv-1.1pre
              ./configure prefix=/home/intel/opencv
              make
              make install
              ldconfig
vous n'êtes pas obligé de respecter mes répertoires d'installation. Mais je conseille de choisir un répertoire propre à opencv.

Après avoir installé de cette manière vous pourrez utiliser opencv correctement tant que vous ne touchez pas à la vidéo pour preuve tester le code suivant.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int main()
{
    CvCapture* capture = cvCaptureFromAVI("mavideo.avi");
 
    IplImage* frame;
    cvNamedWindow("avi reader",CV_WINDOW_AUTOSIZE);
 
 while(1)
    {
        frame = cvQueryFrame(capture);
        if(!frame)  
        {
            puts("no frame, exit error\n");
            break;
        }
        cvShowImage("avi reader",frame);
        char c = cvWaitKey(33);
        if(c==27) break;
 
    }
 
    cvReleaseCapture(&capture);
    cvDestroyWindow("avi reader");
    return 0;
}
ce code n'a aucune erreur à la compilation mais sort toujours sans rien vous montrer à l'écran sinon le message «*no frame,exit error*»
pourquoi?
Parce que opencv n'a pas été installé avec des codecs. La faute a ffmpeg ou au fichier configure de opencv a l'installation: c'est de la faute à opencv car il ne sait pas que la nouvelle version de ffmpeg ne place pas ses entêtes au même endroit qu'avant et opencv est fixe sur les positions des fichiers .h.
la faute à ffmpeg car il a change la position de ses fichiers sans rien dire au autre. Bref nous allons utiliser la méthode la plus simple pour installer ffmpeg et opencv.

Installation 2:
dans un premier temps installons ffmpeg ffmpeg-libs et ffmpeg-dev. Et on remarque que les fichiers .h se trouvent dans : /usr/include/ffmpeg/des_dossiers_pour_chaque_type/*.h
or opencv cherche dans /usr/include/ffmpeg/*.h . dans ce cas la solution la plus rapide c'est de tout copier vers la ou opencv cherchera soit:
puis on copie tout vers l'emplacement courant
n'oubliez pas le '.' A la fin.
Puis on relance configure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
./configure --prefix=/home/Intel/opencv-1.1/ --enable-apps --with-ffmpeg --with-gnu-ld --with-x --without-quicktime CXXFLAGS=-fno-strict-aliasing CFLAGS="-I/usr/include/ffmpeg" CPPFLAGS="-I/usr/include/ffmpeg"
et voila le code précédent marche bien.

Mais voila que vous modifier votre vidéo et que bizarrement quand vous voulez enregistrer il y a une erreur. Le plus étrange c'est que même quand vous faite un copier coller de cours sur opencv ça ne marche pas. Doit-ton rappeler l'éditeur du livre? Non les livres partent du faite le l'installation s'est déroulé correctement et que ce dont vous avez besoin c'est de savoir comment l'utiliser.
La faute a qui? Cette fois je connais pas le coupable. Je peux juste vous dire comment régler le problème:

Installation 3:
l'installation suivante est identique a la précédente sauf qu'avant on a une petite modification à faire. Éditer un fichier et faite l'installation 2 pour que le problème disparaisse comme s'il n'avait jamais existé.
Le fichier a éditer c'est cvcap_ffmpeg.cpp il est dans opencv-1.1pre/otherlibs/highgui donc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
vi opencv-1.1.0-pre/otherlibs/highgui/cvcap_ffmep.cpp
recherche la fonction CvVideoWriter_FFMPEG::open
remplacer laligne ou vous voyez av_codec_get_id par

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
const AVCodecTag * tags[] = { codec_bmp_tags, NULL};
if( (codec_id = av_codec_get_id(tags, fourcc)) == CODEC_ID_NONE ){
la déclaration de la constante est l'expression dans if sont très important. Après refaite l'installation 2 et c'est ok


pour le moment j'en suis la quand je trouverai d'autre problèmes je compléterai le document.