Corrigé un code source en opencv

hb2012 Messages postés 15 Date d'inscription vendredi 11 mai 2012 Statut Membre Dernière intervention 3 septembre 2015 - 31 mai 2012 à 15:34
hb2012 Messages postés 15 Date d'inscription vendredi 11 mai 2012 Statut Membre Dernière intervention 3 septembre 2015 - 1 juin 2012 à 16:00
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

katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
1 juin 2012 à 01:40
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;
}
0
hb2012 Messages postés 15 Date d'inscription vendredi 11 mai 2012 Statut Membre Dernière intervention 3 septembre 2015
1 juin 2012 à 10:01
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..
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
1 juin 2012 à 12:32
ton code ou le mien?
0
hb2012 Messages postés 15 Date d'inscription vendredi 11 mai 2012 Statut Membre Dernière intervention 3 septembre 2015
1 juin 2012 à 12:40
le mien monsieur!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
1 juin 2012 à 12:55
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().
0
hb2012 Messages postés 15 Date d'inscription vendredi 11 mai 2012 Statut Membre Dernière intervention 3 septembre 2015
1 juin 2012 à 15:40
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
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
1 juin 2012 à 15:46
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.
0
hb2012 Messages postés 15 Date d'inscription vendredi 11 mai 2012 Statut Membre Dernière intervention 3 septembre 2015
1 juin 2012 à 16:00
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 .
0
Rejoignez-nous