Partage
  • Partager sur Facebook
  • Partager sur Twitter

Quelques questions sur openCV

    19 novembre 2017 à 18:24:57

    Bonjour à tous,

    j'ai fini mes études en optique et j'ai entamé les démarches pour partir en thèse qui comprendra une bonne part de vision par ordinateur.

    Je me suis donc lancé dans l'apprentissage d'openCV (sachant que je vais peut être toucher à CUDA aussi). Le problème c'est qu'on utilisait surtout Matlab et on a juste fait un peu de C pour de l'embarqué et on a vu les bases du C++. Du coup je rame un peu pour m'y remettre (heureusement j'ai C++ Primer 5th édition sous le coude) 

    1)  Est ce que vous auriez des références de bouquins pour commencer avec openCV ? j'ai vu "openCV by exemples" sur Amazon, il vaut quoi ?

    2) J'ai installé C::B 16.01 et mingw 7.2.0 sur mon PC (windows 10 64bits) et openCV 3.3.1 avec le tuto suivant : https://fr.slideshare.net/WeiWenHsu/using-opencv-320-with-codeblocks

    Sous codeBlocks j'ai un truc comme 800 warnings, surtout des "use of old style cast " et des "zeros as null pointer constant. ça vient des sources openCV. Je suppose que ça vient des nouveaux standards C++11 et que je peux rien y faire ?

    3) Pour essayer de comprendre ce que faisais C::B j'ai tenté de compiler depuis PowerShell (W10) avec une commande que j'ai trouvé sur StackOverflow (adaptée à mon cas)  :

    g++ .\main.cpp -o out.exe -I"L:/openCV/opencv_3.3.1/MyBuild/install/include/" -L"L:/openCV/opencv_3.3.1/MyBuild/install/x64/mingw/lib" -lopencv_world331

    ça marche mais je voudrais savoir à quoi correspond le opencv_world ? sur StackOverflow ils parlaient de rajouter aussi -lopencv_huigui et -lopencv_core. moi ça marche juste avec opencv_world. ça m'arrange mais est ce que c'est normal ?

    Dans mon .cpp il y a en en-tête :

    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>


    4) Pendant un cours de traitement d'image (en Matlab...) on avait vu des procédures, par exemple des passes bas ou des passes haut. Ça consistait à balader des matrices 3x3 sur toute l'image pour changer les valeurs de chaque pixel. En Matlab c'est facile, c'est un truc du genre IM(i,j) = sum(IM(i-1:i+1 , j-1:j+1) .*maMatrice3x3). J'avoue ne pas avoir poussé les recherches, mais je suppose que c'est pas possible avec la classe Mat d'openCV ? Dans ce cas là, quelle est la méthode la plus simple d'acceder aux données d'une matrice image ?

    J'ai la solution bourrine en tête (rentrer les coefficients de maMatrice3x3 en dur dans le code et accéder à la main aux 9 valeurs de la matrice image un par un) , mais il y a peut être plus élégant ?

    5) Le format des matrices couleurs, c'est comment ? une matrice Npx x Npx x3 ? ou un truc plus alambiqué ?

    en tout cas merci à ceux qui prendront la peine de répondre ;)

    -
    Edité par hamster1er 19 novembre 2017 à 18:42:17

    • Partager sur Facebook
    • Partager sur Twitter
      19 novembre 2017 à 21:38:10

      0) as tu envisage python aussi ? Il y a un binding OpenCV dessus et beaucoup plus de lib math plus simple a utiliser qu'en C++

      1) les concepts d'OpenCV peuvent etre appris avec n'importe quel langage, ne te limites pas aux livres C++ pour OpenCV.

      Et en dehors des livres, il y a pas mal de choses dans la doc et les exemples, et pas mal de tutos. Pour tes recherches internet, tu peux aussi ajouter des mots cles (par exemple "opencv tracking", "opencv face recognition", etc). Un exemple de site de tutos : https://www.learnopencv.com/ 

      2) Il faudrait regarder le code, le projet, etc. pour fixer les warnings. Mais ton tuto semble moisi, ca utilise les libs MSVC avec MingW ? Je te conseille d'utiliser le meme compilateur qui a ete utilise pour compiler OpenCV, c'est a dire visual studio 2015.

      EDIT : en fait, je viens de voir que ton tuto utilise les sources d'opencv et le recompile. Ne t'embetes pas, utilises les binaires d'opencv et visual studio. Ca sert a rien que tu t'embetes avec ces details si ton but est d'appendre opencv. (Voire utilises Python, pas le C++)

      3) opencv_world c'est le nom de la lib opencv (qui doit probablement contenir plusieurs modules opencv). lopencv_huigui c'est le module widget (avec Qt) de opencv. opencv_core c'est les fonctionnalités de base d'opencv.

      4) tu peux acceder aux pixels avec Mat. Regarde aussi du coute des filtres, opencv propose deja des choses.

      5) Mat contient un parametre template pour le format interne, donc ca depend de ce que tu veux.

      • Partager sur Facebook
      • Partager sur Twitter
        21 novembre 2017 à 19:23:51

        gbdivers a écrit:

        0) as tu envisage python aussi ? Il y a un binding OpenCV dessus et beaucoup plus de lib math plus simple a utiliser qu'en C++

        1) les concepts d'OpenCV peuvent etre appris avec n'importe quel langage, ne te limites pas aux livres C++ pour OpenCV.

        Et en dehors des livres, il y a pas mal de choses dans la doc et les exemples, et pas mal de tutos. Pour tes recherches internet, tu peux aussi ajouter des mots cles (par exemple "opencv tracking", "opencv face recognition", etc). Un exemple de site de tutos : https://www.learnopencv.com/ 

        2) Il faudrait regarder le code, le projet, etc. pour fixer les warnings. Mais ton tuto semble moisi, ca utilise les libs MSVC avec MingW ? Je te conseille d'utiliser le meme compilateur qui a ete utilise pour compiler OpenCV, c'est a dire visual studio 2015.

        EDIT : en fait, je viens de voir que ton tuto utilise les sources d'opencv et le recompile. Ne t'embetes pas, utilises les binaires d'opencv et visual studio. Ca sert a rien que tu t'embetes avec ces details si ton but est d'appendre opencv. (Voire utilises Python, pas le C++)

        3) opencv_world c'est le nom de la lib opencv (qui doit probablement contenir plusieurs modules opencv). lopencv_huigui c'est le module widget (avec Qt) de opencv. opencv_core c'est les fonctionnalités de base d'opencv.

        4) tu peux acceder aux pixels avec Mat. Regarde aussi du coute des filtres, opencv propose deja des choses.

        5) Mat contient un parametre template pour le format interne, donc ca depend de ce que tu veux.


        Merci pour ta réponse !

        0 et 1 ) alors en fait ma question était peut être pas assez précise. La thèse portera aura un aspect computer vision mais l'utilisation d'openCV n'est pas garantie. J'ai pas vraiment demandé lors de l'entretien. ça se trouve ça sera CUDA, ou des librairies à eux (ils font des trucs assez costauds, ça m'étonnerait pas) . Je veux juste me faire les dents sur des algos de bases. Par contre ce qui est clair c'est que ça sera programmé en C/C++, autant faire d'une pierre 2 coups non ?

        2) Bah en tout cas c'est fait. J'ai donc à disposition mon build pour C::B et le build fournit dans l'archive (pour VS donc). justement je voulais essayer VS, je verrais bien. Sur mon projet de test, c'était juste un imread et un imshow, pas de quoi fouetter un canard

        3) C'est bien ça effectivement. ça évite juste de charger les autres une par une.

        4 et 5) je vais aller voir la doc. Mon but pour l'instant c'est d'essayer d'implémenter des algos simples que j'ai déjà vu,  comparer avec mes programmes Matlab, comparer avec les algos d'openCV. Juste pour me remettre dans le bain quoi ;)

        Le projet en gros c'est de concevoir un capteur photo, puis de savoir l'utiliser. En particulier de dématricer/débayeriser une image brute de capteur. D'où mes question 4 et 5.  Pour tester faut juste que j'apprenne à lire les formats .cr2 de Canon ou .dng d'Adobe. ça va pas être triste

        -
        Edité par hamster1er 21 novembre 2017 à 19:37:17

        • Partager sur Facebook
        • Partager sur Twitter
          21 novembre 2017 à 20:20:18

          0 et 1) pas forcement une bonne idee. Il est preferable de ne pas melanger plusieurs apprentissages, pour eviter les confusions.

          Pour le "C\C++", de toute façon, a l’université, ils ne savent pas programmer correctement. (Je trolle a moitie)

          4 et 5) une petite recherche avec C++ et cr2 donne pas mal de resultat. En particulier libraw https://www.libraw.org/  et un gros tuto qui explique le format cr2 http://lclevy.free.fr/cr2/. Et tous les 2 sont a jour (ce qui est exceptionnel !)

          Donc en gros, c'est de la doc technique chiante, mais rien de compliqué.

          • Partager sur Facebook
          • Partager sur Twitter
            23 novembre 2017 à 13:12:16

            Cool merci pour les doc des .cr2 . J'avais trouvé libRaw mais pas le second lien

            pour la prog en C++ faut espérer que Technicolor sache mieux y faire qu'à l'université xD

            PS : j'ai essayé avec VS 2017 Community et j'ai une erreur

            LNK1104    impossible d'ouvrir le fichier 'opencv_world331d.obj' 

            Dans le projet j'ai bien précisé que c'était en x64, j'ai ajouté le repertoire include, j'ai ajouté le repertoire des lbrairies et j'ai ajouté opencv_world331.lib dans les dépendances. J'ai bien fais gaffe, c'est le repertoire pré-build de l'archive openCV que j'ai ajouté, pas celui que j'ai fais pour C::B.

            dans le main de test il y a juste un include de opencv.hpp  et rien dans le main (return 0)

            -
            Edité par hamster1er 23 novembre 2017 à 13:28:58

            • Partager sur Facebook
            • Partager sur Twitter
              7 avril 2018 à 17:00:49

              Bonjour à tous,

              Bon voila, j'ai installé et compilé opencv (+extra modules) en utilisant mingw et cmake, j'utilise maintenant codeblocks pour programmer mais le soucis est que :

              Pour les modules principaux d'opencv tout fonctionne sans soucis mais pour les extra modules je n'arrive pas à les inclure dans mon programme, par exemple pour <opencv2/face.hpp> j'ai l'erreur suivante -->fatal error: opencv2/face.hpp: No such file or directory

              je précise que tous les fichier .dll.a des extra modules sont présents (après compilation avec mingw) et que j'ai bien linké toutes les librairies.

              quelqu'un aurait-il une idée de l'origine du problème svp ??

              Merci

              • Partager sur Facebook
              • Partager sur Twitter
                9 juin 2018 à 23:13:24

                Vérifiez que les options du compilateur précisent bien la racine des fichier d'en-tête dans la liste de recherche des fichiers d'en-tête.
                • Partager sur Facebook
                • Partager sur Twitter
                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                Quelques questions sur openCV

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown