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

C++ Discussion :

plutôt tableau ou plutôt vector


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 59
    Points
    59
    Par défaut plutôt tableau ou plutôt vector
    Bonjour,

    Je débute en C++(MC 2010 Express) et open Cv (2.4.8)

    J'ai un premier code qui me permet de créer un buffer d'image (représenté par un tableau de Mat ) tiré d'une vidéo.

    Mais j'essaie de créer une fonction "Buffer" qui serait donc extérieur à mon main (pour m'entraîner) :

    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
    # include "cv.h"
    # include "highgui.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
     
    using namespace cv;
     
    Mat Buffer(String URL){
     
    	   VideoCapture capture;
     
    		capture.open(URL);
     
    		Mat frames[50];//std::vector<Mat> frames;
     
    		for (int compteur = 0 ; compteur < 50 ; compteur++)
    			{
    				capture>>frames[compteur];
    			}	
     
    		return frames;
    }
     
     
    int main()
    {
    		Mat frames[50]; //ou std::vector<Mat> frames;
     
    		frames=Buffer("C:\\Documents and Settings\\SY_R\\red_car_video.avi")
     
    		imshow("image:",frames[10]);
     
    		imshow("image2:",frames[20]);
     
    		cvWaitKey (0);
            return 0;
    }
    Voilà si j'essaie avec vector j'obtiens :

    1>c:\documents and settings\sy_r\mes documents\visual studio 2010\projects\open_cv\open_cv\essai1.cpp(11): error C2955: 'cv::Vector'*: l'utilisation d'une classe modèle requiert une liste d'arguments modèle
    1> c:\opencv8\build\include\opencv2\core\operations.hpp(2271)*: voir la déclaration de 'cv::Vector'
    1>c:\documents and settings\sy_r\mes documents\visual studio 2010\projects\open_cv\open_cv\essai1.cpp(11): error C2079: 'Buffer' utilise une class de 'cv::Vector' non défini

    Et si j'essaie avec Mat j'obtiens :

    1>c:\documents and settings\sy_r\mes documents\visual studio 2010\projects\open_cv\open_cv\essai1.cpp(24): error C2664: 'cv::Mat::Mat(const cv::Mat &)'*: impossible de convertir le paramètre 1 de 'cv::Mat [50]' en 'const cv::Mat &'
    1> Raison*: impossible de convertir de 'cv::Mat [50]' en 'const cv::Mat'
    1> Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë


    Alors tout d'abord pourriez vous me conseiller : plutôt Mat ou plutôt Vector ? logiquement si je suis en C++ autant utilisé la classe vector mais d'après ce que j'ai pu voir sur internet pour régler les problèmes de "modèle" ça m'a l'air beaucoup plus compliqué ... Pour autant j'imagine que si j'utilise mat je vais devoir régler mes problèmes en utilisant des pointeurs ? (ce que j'aimerais éviter à tout prix..)

    Cordialement,

    Ronan

  2. #2
    Membre actif
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Points : 282
    Points
    282
    Par défaut
    Ta fonction a comme prototype ça :
    Et tu renvoies ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Mat frames[50];
    //blabla
    return frames;
    Il faudrait renvoyer plutôt un Mat *, de plus si tu utilises un vector à la place tu renverras un "vector<Mat>", mais pas juste un "Mat". Sinon tu choisis quel Mat tu veux renvoyer de ton tableau.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Comme indiqué :

    J'ai déjà essayé Mat* mais j'aimerais éviter les pointeurs (et cela ne fonctionne pas également :

    1>c:\documents and settings\sy_r\mes documents\visual studio 2010\projects\open_cv\open_cv\essai1.cpp(24): warning C4172: retourne l'adresse d'une variable locale ou temporaire
    1>c:\documents and settings\sy_r\mes documents\visual studio 2010\projects\open_cv\open_cv\essai1.cpp(34): error C2440: '='*: impossible de convertir de 'cv::Mat *' en 'cv::Mat [50]'
    1> Aucune conversion en types tableau, même s'il y a des conversions en références ou en pointeurs de tableau

    Quant au vector<Mat> c'est aussi ce que j'ai déjà essayé,

    Merci,

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Bon ce que j'avais vu sur internet à propos du "Vector" ne devait pas correspondre à mes erreurs.

    Le code suivant fonctionne :


    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
    41
    42
    # include "cv.h"
    # include "highgui.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
     
    using namespace cv;
     
    std::vector<Mat> Buffer(String URL){
     
    	   VideoCapture capture;
     
    		capture.open(URL);
     
    		  std::vector<Mat> v;
    		  Mat frames;
     
    		 for (int i = 0; i < 50; i++)
    			{
     
    				capture>>frames;
    				v.push_back (frames);
    			}
     
    		return v;
    }
     
     
    int main()
    {
     
    		 std::vector<Mat> frames;
     
    		frames=Buffer("C:\\Documents and Settings\\SY_R\\red_car_video.avi");
     
    		imshow("image:",frames[10]);
     
    		imshow("image2:",frames[20]);
     
    		cvWaitKey (0);
            return 0;
    }

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

Discussions similaires

  1. Mélanger un tableau de type vector
    Par who_knows dans le forum Langage
    Réponses: 3
    Dernier message: 25/11/2010, 12h14
  2. Vector plutôt que tableau (débutant)
    Par totoche dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/12/2007, 14h52
  3. Réponses: 19
    Dernier message: 12/09/2007, 15h34
  4. recherche d'un objet de type tableau dans un vector
    Par sandy07 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/06/2007, 09h16
  5. Tableau bidimensionnel de Vector
    Par j0o0 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 05/05/2007, 19h51

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