Corrigé un code source en opencv

Signaler
Messages postés
15
Date d'inscription
vendredi 11 mai 2012
Statut
Membre
Dernière intervention
3 septembre 2015
-
hb2012
Messages postés
15
Date d'inscription
vendredi 11 mai 2012
Statut
Membre
Dernière intervention
3 septembre 2015
-
slt tout le monde,
j'ai une problème au niveau programmation de opencv , j'ai déjà fait une partie du travail demandé , j'ai réalisé une séquence d'image faisant une vidéo, mais maintenant ,il faut que je dessin un rectangle dans l'image pour détecter un objet pour le moment il est fixe, ne fait pas la suivi du l'objet.
ce pour cela ,j'ai fait un petit code ,malheureusement il me donne des erreurs.Voici le code :
    #include "stdafx.h"
    #include <cv.h>
    #include <vector>
    #include <string>
    #include <cxcore.h>
    #include <highgui.h>
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
        for (int k=0;k<1;k++)
    {
    std::string varimg;
    char format[] = "franck_000%d.jpg";
    char filename[sizeof format+100];
    sprintf(filename,format,k);
    varimg = filename ;
    IplImage*imgw = cvLoadImage( varimg.c_str() ); 
    cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
    cvRectangle(imgw, cvPoint(230,100),cvPoint(550,500),CV_RGB(255,0,0), 3);
     cvShowImage("Example1",imgw);
        cvWaitKey(1);
    cvReleaseImage(&imgw);
    }
        return 0;
    }

merci d'avance pour chacun pense de m'aider.

8 réponses

Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Salut, il y a du boulot.

cvNamedWindow() crée une fenêtre donc le mettre avant la boucle.

char format[] = "franck_000%d.jpg";
devrait être
char format[] = "franck_%04d.jpg";
n'est-ce pas?

char filename[sizeof format+100];
devrait être
char filename[16];

Sinon cvLoadImage() et cvRectangle() prennent plus d'arguments sur la version installée ici.

for (int k =0;k<1;k++)
c'est volontaire de ne pas boucler trop longtemps?

Je viens de tester ça (en C) et ça marche bien:

int main()
{
  cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );

  char filename[18];
  int n;
  for (n=0; n<100; n++)
  {
    sprintf(filename,"img/frame%04d.jpg", n);
    IplImage*imgw = cvLoadImage(filename, CV_LOAD_IMAGE_COLOR); 
    cvRectangle(imgw, cvPoint(230,100), cvPoint(550,500), CV_RGB(255,0,0),1, CV_AA, 0);
    cvShowImage("Example1",imgw);
    if (cvWaitKey(200)>0) break;
    cvReleaseImage(&imgw);
  }

  return 0;
}
Messages postés
15
Date d'inscription
vendredi 11 mai 2012
Statut
Membre
Dernière intervention
3 septembre 2015

merci mon ami de me répondre mais je te rappelle que le code se génère correctement mais lors d'ouvrir l'application il me donne une erreur comme de suite:
Exception non gérée à 0x000007fefd21cacd (KernelBase.dll) dans OpenCV_serimg.exe : Exception Microsoft C++ : cv::Exception à l'emplacement mémoire 0x0017e560..
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
ton code ou le mien?
Messages postés
15
Date d'inscription
vendredi 11 mai 2012
Statut
Membre
Dernière intervention
3 septembre 2015

le mien monsieur!!
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Pour savoir ce qui se passe: juste après le sprintf() mettre un printf("[%s]\n", filename); pour vérifier ce que contient la variable filename. Et commenter cvLoadImage(), cvRectangle(), cvShowImage().
Messages postés
15
Date d'inscription
vendredi 11 mai 2012
Statut
Membre
Dernière intervention
3 septembre 2015

il m'a dit :
[franck_0000.jpg]
Opencv error:Nullpointer <Null array pointer is passed> in known function,fil..\..\..\src\cxcore\cxarray.cpp,line 2376
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
IplImage*imgw = cvLoadImage( etc );
// vérifie que le chargement a réussi
if (!imgw)
{
 puts("cvLoadImage(%s) a echoué\n", filename);
 break;
}

L'image doit être dans le même dossier que l'exe, probablement un problème de chemins relatifs.
Messages postés
15
Date d'inscription
vendredi 11 mai 2012
Statut
Membre
Dernière intervention
3 septembre 2015

monsieur je te renseigne que j'ai déjà fait le même travail sans cvrectangle et elle marche parfaitement mais lorsque j'ajoute ce dernier ne fonctionne pas je ne sais pas pourquoi???!!!! la problème c'est que je sent qu'il existe une faute banale .