Extraction des images d'une vidéo

cs_elo29 Messages postés 70 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 26 avril 2006 - 19 avril 2006 à 09:45
cs_elo29 Messages postés 70 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 26 avril 2006 - 20 avril 2006 à 09:05
Bonjour!!

Dans le cadre de mon projet, j'ai besoin d'extraire les images d'une vidéo, or la caméra ne le fait pas elle-même et je suis un peu perdue quant à la façon de réaliser ce travail. J'ai trouvé un code qui pourrait le faire à cette adresse "www.codeproject.com/audio/ExtractAVIFrames.asp" mais je n'arrive pas à le faire marcher. J'ai mis la fonction CreateFromPackedDIBPointer en .h et à la fin du programme principal j'ai mis, camera_capture étant mon .avi :

int main()
{
CString camera_capture;
ExtractAVIFrames(camera_capture);
return 0;
}

Je ne suis pas très forte en C donc il se peut que je fasse une grosse erreur dans l'utilisation de ce code. Je travaille avec VC++.
Pouvez-vous m'aider à résoudre ce problème svp? Merci

3 réponses

cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
19 avril 2006 à 22:00
cette fonction , que j'utilise sert à extraire une image d'un fichier vidéo AVI.
On trouve les fonctions que tu recherches dans la bibliothèque vfw (vidéo for windows). il faut lire l'aide sur les macros disponibles.
il faut que je cherche le code. en tout cas camera capture doit avoir ue valeur (un nom de fichier si tu veux que ça fonctionne.

louis14
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
19 avril 2006 à 22:08
bon voilà le code que j'utilise ( qui vient de codeproject) et qui fonctionne

AVIFileInit();


LONG m_curframe = MCIWndGetPosition(m_Video);//ici on récupère l'image courante de la vidéo



//declaration


PAVISTREAM m_avistream = NULL;


AVISTREAMINFO m_streaminfo;


HIC m_decomp = NULL;



long m_fmtlen,
//


m_buflen;
//



long m_startframe,


m_endframe;




LPBITMAPINFOHEADER m_srcfmt = NULL;


BYTE* m_rawdata = NULL;


BYTE* m_finaldata = NULL;


PGETFRAME gapgf = NULL;



//Ouverture du fichier



long r;



if (m_avistream)


AVIStreamRelease( m_avistream ), m_avistream=NULL;


r=AVIStreamOpenFromFile( &m_avistream, m_Path,


streamtypeVIDEO, 0, OF_READ | OF_SHARE_EXCLUSIVE, 0 );


TRACE("AVIStreamOpenFromFile: %s\n", r==0 ? "OK" : "failed" );



//»ñµÃ»º³åÇøµÄ³¤¶È


r=AVIStreamFormatSize( m_avistream, 0, &m_fmtlen );


TRACE("AVIStreamFormatSize: %s\n", r==0 ? "OK" : "failed" );



int formatsize=m_fmtlen+
sizeof(RGBQUAD)*256;



if (m_srcfmt)



delete [] m_srcfmt;


m_srcfmt = (LPBITMAPINFOHEADER)
new BYTE[formatsize];


ZeroMemory( m_srcfmt, formatsize );



if (m_dstfmt)



delete [] m_dstfmt;


m_dstfmt = (LPBITMAPINFOHEADER)
new BYTE[formatsize];


ZeroMemory( m_dstfmt, formatsize );


r=AVIStreamReadFormat( m_avistream, 0,


m_srcfmt,


&m_fmtlen );

TRACE("AVIStreamReadFormat: %s\n", r==0 ? "OK" : "failed" );


TRACE(" --- %s ---\n", m_Path);


TRACE(" biSize: %d\n", m_srcfmt->biSize );


TRACE(" biWidth x biHeight: %dx%d\n", m_srcfmt->biWidth, m_srcfmt->biHeight );



if (m_srcfmt->biPlanes != 1)


TRACE(" - biPlanes: %d\n", m_srcfmt->biPlanes );


TRACE(" biBitCount: %d\n", m_srcfmt->biBitCount );


CString comp;



switch (m_srcfmt->biCompression)


{



case BI_RGB:


comp="BI_RGB";



break;



case BI_RLE8:


comp="BI_RLE8";



break;



case BI_RLE4:


comp="BI_RLE4";



break;



case BI_BITFIELDS:


comp="BI_BITFIELDS";



break;


}


TRACE(" biCompression: %s\n", comp );


TRACE(" biSizeImage: %d\n", m_srcfmt->biSizeImage );


TRACE(" ------------------\n");


memcpy( m_dstfmt, m_srcfmt, m_fmtlen );


m_startframe = AVIStreamStart( m_avistream );


TRACE("stream start: %d\n", m_startframe);


m_endframe = AVIStreamEnd( m_avistream );


TRACE("stream end: %d\n", m_endframe );


r=AVIStreamInfo( m_avistream, &m_streaminfo,
sizeof(m_streaminfo) );


TRACE("AVIStreamInfo: %s\n", r==0 ? "OK" : "failed" );


m_buflen = m_dstfmt->biSizeImage;



int finalbuflen=((m_dstfmt->biWidth+3) & ~3) * m_dstfmt->biHeight;



if (m_streaminfo.dwSuggestedBufferSize)



if ((LONG)m_streaminfo.dwSuggestedBufferSize < m_buflen)


{


TRACE("adjusting m_buflen to suggested size\n");


m_buflen = (LONG)m_streaminfo.dwSuggestedBufferSize;


}



if (m_decomp)


ICClose( m_decomp );


m_decomp = ICDecompressOpen( ICTYPE_VIDEO, m_streaminfo.fccHandler, m_srcfmt, m_dstfmt );


TRACE("ICDecompressOpen: %s\n", m_decomp ? "OK" : "failed");



if (m_rawdata)


{


TRACE("delete [] m_rawdata...\n");



delete [] m_rawdata;


}


m_rawdata =
new BYTE[m_buflen];



if (m_finaldata)


{


TRACE("delete [] m_finaldata...\n");



delete [] m_finaldata;


}


m_finaldata =
new BYTE[finalbuflen];


gapgf = AVIStreamGetFrameOpen(m_avistream, NULL);



//getframe


LPSTR lpbi = NULL;



if(m_endframe == m_curframe)


m_curframe--;


lpbi = (LPSTR)AVIStreamGetFrame(gapgf, m_curframe);


HBITMAP hbitmap = CreateBitmap((BYTE*)AVI_FindDIBBits(lpbi),(LPBITMAPINFOHEADER)lpbi);


CxImage ima;


ima.CreateFromHBITMAP(hbitmap);


CString filename;


filename.Format("%s_%d.bmp",m_genericfile,m_curframe);//ici le nom du fichier et cur_frame le numéro de l'image


ima.Save(filename, CXIMAGE_FORMAT_BMP);



//création



if (m_avistream)


AVIStreamRelease( m_avistream ), m_avistream = NULL;



if (m_decomp)


ICClose( m_decomp ), m_decomp=NULL;





if (m_srcfmt)



delete [] m_srcfmt, m_srcfmt=NULL;



if (m_dstfmt)



delete [] m_dstfmt, m_dstfmt=NULL;



if (m_rawdata)


{


TRACE("delete [] m_rawdata...\n");



delete [] m_rawdata, m_rawdata=NULL;


}



if (m_finaldata)


{


TRACE("delete [] m_finaldata..\n");



delete [] m_finaldata, m_finaldata=NULL;;


}



if (gapgf)


{


AVIStreamGetFrameClose(gapgf);


gapgf = NULL;


}


AVIFileExit();

celà doit être ta fonction

louis14
0
cs_elo29 Messages postés 70 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 26 avril 2006
20 avril 2006 à 09:05
Merci pour la réponse, je regarde ça!!!
0
Rejoignez-nous