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

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 1
    Points
    1
    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 302
    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 302
    Points : 52 882
    Points
    52 882
    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
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 1
    Points
    1
    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 302
    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 302
    Points : 52 882
    Points
    52 882
    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.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 1
    Points
    1
    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 302
    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 302
    Points : 52 882
    Points
    52 882
    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 ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai résolu l'ensemble de mes problèmes.
    Merci encore Dut pour les réponses.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par Silver44Wing Voir le message
    J'ai résolu l'ensemble de mes problèmes.
    Quel était le problème ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Une erreur dans le code qui faisait tout planté. Mais je comprend pas pourquoi il disait qu'il trouvait pas le mexw64, le lendemain quand j'ai lancé Matlab et recompilé tout fonctionnait.

+ 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, 16h52
  2. algorithme Viola et Jones via OpenCV
    Par didouainos dans le forum Images
    Réponses: 34
    Dernier message: 05/01/2013, 18h08
  3. Problème variable locale sur MATLAB
    Par nuans dans le forum MATLAB
    Réponses: 10
    Dernier message: 12/04/2007, 10h34
  4. Nombre pair sur Matlab
    Par cricri04 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/03/2007, 16h46
  5. Un nouveau qui a besoin d'aide sur MATLAB
    Par bf491499 dans le forum MATLAB
    Réponses: 4
    Dernier message: 26/02/2007, 16h10

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