IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Images Discussion :

Viola jones d'OpenCV sur MATLAB (encore)


Sujet :

Images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut Viola jones d'OpenCV sur MATLAB (encore)
    Bonjour,

    Je me permets de poster ici car malgré toute l'aide de Dut sur la plupart des topics similaires, je n'arrive pas à résoudre mon problème.
    Alors tout d'abord,
    ma version de MATLAB "7.13.0.564 (R2011b)"
    mon compilateur "Microsoft Software Development Kit (SDK) 7.1 in c:\Program Files (x86)\Microsoft Visual Studio 10.0"
    Et OpenCV 2.1 dans le fichier: "C:\Program Files (x86)\OpenCV2.1" (je sais les espaces c'est mal)
    Je veux faire un truc tout bête: charger une image
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <highgui.h>
     
    #include "mex.h"
     
    void mexFunction( int nlhs, mxArray *plhs[],
                      int nrhs, const mxArray *prhs[] ) {
     
        printf("Hello World !\n");
        //load the image
        IplImage* img = cvLoadImage("./cameraman.png");
    }

    Je compile en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mex -v helloWorld.cpp -I"C:\Program Files (x86)\OpenCV2.1\include\opencv" -I"C:\Program Files (x86)\OpenCV2.1\include" "C:\Program Files (x86)\OpenCV2.1\lib\*.lib"
    (j'ai vu qu'on pouvait modifier le mexopts.bat mais pour l'instant j'aimerais déjà que cela fonctionne).
    et j'obtiens finalement l'erreur
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    -> Default options filename found in C:\Users\~username\AppData\Roaming\MathWorks\MATLAB\R2011b 
    ---------------------------------------------------------------- 
    ->    Options file           = C:\Users\~username\AppData\Roaming\MathWorks\MATLAB\R2011b\mexopts.bat 
          MATLAB                 = C:\Program Files\MATLAB\R2011b 
    ->    COMPILER               = cl 
    ->    Compiler flags: 
             COMPFLAGS           = /c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD 
             OPTIMFLAGS          = /O2 /Oy- /DNDEBUG 
             DEBUGFLAGS          = /Z7 
             arguments           =  -I"C:\Program Files (x86)\OpenCV2.1\include\opencv" -I"C:\Program Files (x86)\OpenCV2.1\include" 
             Name switch         = /Fo 
    ->    Pre-linking commands   =  
    ->    LINKER                 = link 
    ->    Link directives: 
             LINKFLAGS           = /dll /export:mexFunction /LIBPATH:"C:\Program Files\MATLAB\R2011b\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.lib cv210.lib cxcore210.lib highgui210.lib cxcore210.lib /MACHINE:X64 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /manifest /incremental:NO /implib:"C:\Users\~username\AppData\Local\Temp\mex_hrM5os\templib.x" /MAP:"helloWorld.mexw64.map" 
             LINKDEBUGFLAGS      = /debug /PDB:"helloWorld.mexw64.pdb" 
             LINKFLAGSPOST       =  
             Name directive      = /out:"helloWorld.mexw64" 
             File link directive =  
             Lib. link directive =  
             Rsp file indicator  = @ 
    ->    Resource Compiler      = rc /fo "mexversion.res" 
    ->    Resource Linker        =  
    ---------------------------------------------------------------- 
     
     
    --> cl  -I"C:\Program Files (x86)\OpenCV2.1\include\opencv" -I"C:\Program Files (x86)\OpenCV2.1\include" /c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD /FoC:\Users\~username\AppData\Local\Temp\mex_hrM5os\helloWorld.obj -I"C:\Program Files\MATLAB\R2011b\extern\include" /O2 /Oy- /DNDEBUG -DMX_COMPAT_32 helloWorld.cpp 
     
    helloWorld.cpp 
        Contents of C:\Users\~username\AppData\Local\Temp\mex_hrM5os\mex_tmp.rsp: 
      C:\Users\~username\AppData\Local\Temp\mex_hrM5os\helloWorld.obj 
     
     
    --> link /out:"helloWorld.mexw64" /dll /export:mexFunction /LIBPATH:"C:\Program Files\MATLAB\R2011b\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.lib cv210.lib cxcore210.lib highgui210.lib cxcore210.lib /MACHINE:X64 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /manifest /incremental:NO /implib:"C:\Users\~username\AppData\Local\Temp\mex_hrM5os\templib.x" /MAP:"helloWorld.mexw64.map"  @C:\Users\~username\AppData\Local\Temp\mex_hrM5os\mex_tmp.rsp   
     
       Création de la bibliothèque C:\Users\~username\AppData\Local\Temp\mex_hrM5os\templib.x et de l'objet C:\Users\~username\AppData\Local\Temp\mex_hrM5os\templib.exp 
    helloWorld.obj : error LNK2019: symbole externe non résolu cvLoadImage référencé dans la fonction mexFunction 
    helloWorld.mexw64 : fatal error LNK1120: 1 externes non résolus 
     
      C:\PROGRA~1\MATLAB\R2011B\BIN\MEX.PL: Error: Link of 'helloWorld.mexw64' failed.
    Merci de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Tu essaies de compiler un MEX 64 bits avec une version 32 bits de OpenCV.
    Utilise une version plus récente 2.4.? => http://opencv.org/

    Et suis ce que j'ai écris ici : http://www.developpez.net/forums/d12...v/#post7051002 en remplaçant éventuellement vc9 par vc10

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut
    Désolé pour le délai (ponts, etc...)
    Je vais essayer ce que tu m'as dit Dut mais c'est bizarre que sur le site d'openCV il ne propose à aucun moment de choisir une version 32 ou 64.

    Du coup avec Matlab R2013a et OpenCV 2.4.5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mex helloworld.cpp -v -I"C:\OpenCV2.4.5\opencv\include\opencv" -I"C:\OpenCV2.4.5\opencv\include\" "C:\OpenCV2.4.5\opencv\build\x86\vc10\lib\*.lib"
    et la réponse

    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
    26
    27
    28
    29
    30
    31
    32
    -> Default options filename found in C:\Users\username\AppData\Roaming\MathWorks\MATLAB\R2013a 
    ---------------------------------------------------------------- 
    ->    Options file           = C:\Users\username\AppData\Roaming\MathWorks\MATLAB\R2013a\mexopts.bat 
          MATLAB                 = C:\Program Files\MATLAB\R2013a 
    ->    COMPILER               = cl 
    ->    Compiler flags: 
             COMPFLAGS           = /c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD 
             OPTIMFLAGS          = /O2 /Oy- /DNDEBUG 
             DEBUGFLAGS          = /Z7 
             arguments           =  -IC:\OpenCV2.4.5\opencv\include\opencv -IC:\OpenCV2.4.5\opencv\include\ 
             Name switch         = /Fo 
    ->    Pre-linking commands   =  
    ->    LINKER                 = link 
    ->    Link directives: 
             LINKFLAGS           = /dll /export:mexFunction /LIBPATH:"C:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.lib /MACHINE:X64 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /manifest /incremental:NO /implib:"C:\Users\username\AppData\Local\Temp\mex_xzQrsh\templib.x" /MAP:"helloworld.mexw64.map" 
             LINKDEBUGFLAGS      = /debug /PDB:"helloworld.mexw64.pdb" 
             LINKFLAGSPOST       =  
             Name directive      = /out:"helloworld.mexw64" 
             File link directive =  
             Lib. link directive =  
             Rsp file indicator  = @ 
    ->    Resource Compiler      = rc /fo "mexversion.res" 
    ->    Resource Linker        =  
    ---------------------------------------------------------------- 
     
     
    --> cl  -IC:\OpenCV2.4.5\opencv\include\opencv -IC:\OpenCV2.4.5\opencv\include\ /c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD /FoC:\Users\username\AppData\Local\Temp\mex_xzQrsh\helloworld.obj -I"C:\Program Files\MATLAB\R2013a\extern\include" -I"C:\Program Files\MATLAB\R2013a\simulink\include" /O2 /Oy- /DNDEBUG -DMX_COMPAT_32 helloworld.cpp 
     
    helloworld.cpp 
    C:\OpenCV2.4.5\opencv\include\opencv\highgui.h(45) : fatal error C1083: Impossible d'ouvrir le fichier includeÿ: 'opencv2/core/core_c.h'ÿ: No such file or directory 
     
      C:\PROGRA~1\MATLAB\R2013A\BIN\MEX.PL: Error: Compile of 'helloworld.cpp' failed.
    Je vois bien que après Machine 64, c'est Kernel32 mais comment fait-on pour changer la version d'openCV ?
    Et effectivement dans openCV 2.4.5 dans include/opencv2 y'a qu'un fichier opencv.hpp

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Tu ne dois pas utiliser les bibliothèques qui se trouvent dans le sous dossier x86 (32 bits) mais celles du sous dossier x64 (64 bits) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\OpenCV2.4.5\opencv\build\x86\vc10\lib\*.lib"
    Tu dois aussi inclure les entêtes qui se trouvent dans le sous dossier include du dossier build.
    Regarde bien les chemins que j’utilise dans l'autre discussion.

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut
    Merci Dut, j'ai été idiot sur ce coup (copier/coller tes posts de l'autre topic sans vérifier les versions).
    Bref ca compile. Juste je viens d'essayer de lancer helloworld et il me dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Invalid MEX-file 'C:\Users\username\Dropbox\Thèse\Documents pour tuteur\2012-09-28T135432903\mex\helloworld.mexw64': Le
    module spécifié est introuvable.
    Pourtant le fichier helloworld.mexw64 est bien présent. Est ce que les espaces (Document pour) qui créent des problèmes ? J'ai essayé de le bouger de place dans fichier avec un chemin sans espace, c'est pas mieux.

    Dans certaines compilations, il me dit que les librairies VS genre <stdio> ne sont pas trouvées. Il faut rajouter un argument à la compilation pour ça aussi ?

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Il faut inclure les fichiers d’entête standards (comme stdio.h)

    Par contre, ici, pas besoin de stdio.h puisqu'il est conseillé d'utiliser mexPrintf plutôt que printf :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "mex.h"
    #include <highgui.h>
     
    void mexFunction( int nlhs, mxArray *plhs[],
                      int nrhs, const mxArray *prhs[] ) {
     
        mexPrintf("Hello World !\n");
        //load the image
        IplImage* img = cvLoadImage("./cameraman.png");
    }

    Sinon, as-tu testé la démo FaceDetect.cpp ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Viola jones d'OpenCV sur MATLAB
    Par milach dans le forum Images
    Réponses: 2
    Dernier message: 20/03/2013, 17h52
  2. algorithme Viola et Jones via OpenCV
    Par didouainos dans le forum Images
    Réponses: 34
    Dernier message: 05/01/2013, 19h08
  3. Problème variable locale sur MATLAB
    Par nuans dans le forum MATLAB
    Réponses: 10
    Dernier message: 12/04/2007, 11h34
  4. Nombre pair sur Matlab
    Par cricri04 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/03/2007, 17h46
  5. Un nouveau qui a besoin d'aide sur MATLAB
    Par bf491499 dans le forum MATLAB
    Réponses: 4
    Dernier message: 26/02/2007, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo