phipedro
Messages postés9Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention16 juillet 2005
-
11 mai 2005 à 07:42
phipedro
Messages postés9Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention16 juillet 2005
-
14 mai 2005 à 11:10
Voilà je suis étudiant en électronique(école d'ingé) et je suis en stage en Chine. Je dois créer une application qui permettrai de compter des personnes voir de les reconnaitre à l'aide d'une caméra. La carte est faite elle travaille avec un DSP de TI série 6000.
Il faut maintenant que j'écrive le code en C++ sous VC++ 6. Dans un premier temps, je voudrais partir d'une video AVI la transformer en image BMP puis transformer les images BMP en AVI mais pour l'instant, je n'arrive pas à retransformer les bmp pour avoir le même fichier qu'avant et lorsque je copie les BMP sur mon disque, elles sont décallés et elles ont un pb de couleur
aidez moi svp et soyez indulgent d'habitude je programme en C sous UNIX........
merci
Voici le code il ne prend en compte que les 14 premières streams et je ne sais pas pourquoi mais après ilne veut pas faire le "AVICreateStream". En plus je ne peux pas lire le fichier créer!!
int AVIExtraction(char* Name)
{
AVIFileInit();/*initialisation*/
PAVIFILE avi;
/*openning and test of the avi file*/
int r=AVIFileOpen(&avi, Name, OF_READ, NULL);
if(r!=AVIERR_OK)
{
if(avi!=NULL)
AVIFileRelease(avi);
puts("error in openning avi file");
return -1;
}
/*copy of the information*/
AVIFILEINFO info;
AVIFileInfo(avi, &info, sizeof(AVIFILEINFO));
/*getting and test of the stream for a video*/
PAVISTREAM avistream;
r=AVIFileGetStream(avi, &avistream, streamtypeVIDEO, 0);
if(r!=AVIERR_OK)
{
if(avistream!=NULL)
AVIStreamRelease(avistream);
AVIFileExit();
puts("error in getting the stream of the avi file");
return -1;
}
/*creation of bitmap pictures*/
int NFrames=AVIStreamLength(avistream);/*number of frame*/
int FirstFrame=AVIStreamStart(avistream);/*First Frame*/
/*prepare to decopress*/
PGETFRAME frame;
frame=AVIStreamGetFrameOpen(avistream, NULL);
if(frame==NULL)
{
puts("error in the preparation");
return -1;
}
PAVIFILE newavi;
/*openning and test of the avi file*/
r=AVIFileOpen(&newavi, "test.avi",OF_WRITE | OF_CREATE, NULL);
if(r!=0)
{
if(newavi!=NULL)
AVIFileRelease(newavi);
puts("error in openning avi file2");
return -1;
}
/*get the frames*/
int i,j=0;
for (i=FirstFrame; i<NFrames; i++)
{
j= i-FirstFrame;
puts("hello1");
int* pDIB =(int*) AVIStreamGetFrame(frame, j);
r=AVICreation(BInfo,pDIB, newavi);puts("hello2");
if(r==FALSE)
{
puts("error in the avi movie creation loop");
printf("number of created stream : %d\n",j);
return -1;
}
}
AVIStreamGetFrameClose(frame);
/*close the stream */
if (avistream!=NULL)
AVIStreamRelease(avistream);
AVIFileExit();
puts(" the extraction is finshed");
return NFrames;
}
BOOL AVICreation(BITMAPINFOHEADER bih, int* pDIB,PAVIFILE newavi)
{
int r;
/*copy of the information*/
AVISTREAMINFO streaminfo;
ZeroMemory(&streaminfo, sizeof(AVISTREAMINFO));/*restoring*/
/*creation of the new stream*/
PAVISTREAM avistream;
r=AVIFileCreateStream(newavi,&avistream, &streaminfo);
if (r!=0)
{
puts("error in the creation of the new stream");
AVIFileRelease (newavi);
AVIFileExit ();
return FALSE;
}
/*format of the stream*/
AVIStreamSetFormat(avistream, 0, &bih, sizeof(bih));
if (r!=0)
{
puts("error in the setting of the stream format");
AVIStreamClose(avistream);
AVIFileRelease (newavi);
AVIFileExit ();
return FALSE;
}
phipedro
Messages postés9Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention16 juillet 2005 12 mai 2005 à 08:38
merci de ton aide.
j' ai essayé AVIStreamRead et depuis au moins je crée un fichier AVI lisible(c déjà ça)
mais il ne comporte qu'une image. De plus cette image est un mix de 6 images du fichier AVI du départ mais tournées à l'envers!!!!!!
Autre soucis: au bout de 14 streams la fonction AVIFileCreateStream me renvoi AVIERR_UNSUPPORTED !
Autrement concernant tes autres remarques, j'ai modifié le BITMAPINFOHEADER
et j'utilise déjà la fonction AVIStreamWrite(...) pour écrire le nouveau AVI(dernière partie de la fonction AVICreation(...)).
phipedro
Messages postés9Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention16 juillet 2005 12 mai 2005 à 08:52
Au fait j'ai aussi changé les arguments de mon AVIStreamWrite j'ai maintenant:
AVIStreamWrite(avistream,j,1,pDIB,bih.biSizeImage,AVIIF_KEYFRAME,NULL,NULL);
ce qui me permet de ne pas réécrire à chaque fois sur la même image et de n'écrire qu'une seule frameà la fois......
(pDIB étant maintenant un char* comme ton _ImageRaw)
Vous n’avez pas trouvé la réponse que vous recherchez ?
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 12 mai 2005 à 09:18
c'est bizarre ton 14 quand même...
euh, un truc con, t'as bien vérifié qur ton AVI de départ était bon?
Est-ce que ton fichier de départ est compressé? Cela expliquerais le mélange de plusieurs images. Si oui, il faut que, une fois les frames récupérées, tu les décompresse avec ICDecompress(...) ou un truc du genre...
Buno
----------------------------------------
L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
phipedro
Messages postés9Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention16 juillet 2005 12 mai 2005 à 17:13
oui j'ai bien vérifié le fichier de départ et il est OK. Pour la compression il faut que je regarde.
Autrement, ce qui est bizard c'est qu'1 fois sur 4 AVIStreamRead(...)ne lit rien ( BytReadNb=0). De plus, à la 14ème stream le pb vient de AVIFileCreateStream qui me renvoi un truc qui n'a aucun rapport : AVIERR_UNSUPPORTED
Il y a peut être un rapport avec le fait que le fichier de départ serais compressé. Je vérifie ça.
phipedro
Messages postés9Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention16 juillet 2005 14 mai 2005 à 11:10
Je deviens fou. J'ai décompressé l'avi et ça ne marche tjrs pas ! Pour ce qui est du problème des 6 BMP en une je pense savoir d'où ça vient : le partie video de l'avi de base et codée en 12bits et non en 24. Mais lorsque je prends
BInfo.biBitCount =12, la video crée esr noir.
Autrement, j'ai toujours l'erreur AVIERR_UNSUPPORTED renvoyé par AVIFileCreateStream au bout de la 14ème frame.
Merci pour ton aide moi ça fait 10 jours que j'y suis et franchement