Je suis étudiante et j'ai un projet de traitement de video à faire. Seulement je me retrouve face au 1er probleme: comment lire une video!!
J'ai bcp cherché sur internet et j'en arrive à la conclusion que les librairies ffmpeg ou smpeg ne fonctionnent pas. J'ai donc fait un code, qui je pense devrait fonctionner et pourtant j'ai un message d'erreur : ""monprojet" a cessé de fonctionner".
// Le main n'est pas encore tout à fait terminé
int main(int argc, char* argv[])
{
int id, res;
char *nomFichier;
Image *imCourante, *imPrecedente;
long taille;
FILE *ptfile ;
// allocation de la memoire pour les images
imCourante = CreateImage ();
imPrecedente = CreateImage ();
// ouverture du fichier en lecture en mode binaire
ptfile = fopen(argv[1], "rb");
//id = open(argv[0], O_RDONLY | O_BINARY);
stockImage(ptfile, imPrecedente);
//comparaison de 2 blocs de pixels (comparaison au seuil)
//1 si differents, 0 si pareils
//resolution 11*9 -> 99 pixels par blocs, 297 entiers
int compBlocs(unsigned char* bloc1, unsigned char* bloc2){
int res, i;
unsigned char tabRes[99]; //contient les resultats par pixel
for(i=0; i=99; i++){
if((bloc1[i]<=bloc2[i]+VALEUR_PIXEL) && (bloc1[i]<=bloc2[i]-VALEUR_PIXEL)){ //test d'encadrement de la valeur d'un pixel
tabRes[i] = 1;}
else tabRes[i] = 0;
}
for(i=0; i=99; i++){
res+=tabRes[i];}
res = res/99;
if(res>=SEUIL_BLOC){
return 0;}
else return 1;
}
//comparaison des deux images (moyenne des blocs et comparaison au seuil)
//renvoie 1 si elles sont differentes, 0 si elles sont pareilles
int compImages(Image* im1, Image* im2){
unsigned char tabBlocY1[32], tabBlocU1[16], tabBlocV1[16], tabBlocY2[32], tabBlocU2[16], tabBlocV2[16];
unsigned char tabResY[32], tabResU[16], tabResV[16];
int i, res, resY, resU, resV;
divisBlocs2(im1, tabBlocY1, tabBlocU1, tabBlocV1); //division des trames en blocs
divisBlocs2(im2, tabBlocY2, tabBlocU2, tabBlocV2);
for(i=0; i=32; i++){ //comparaison des blocs de la trame Y
res = compBlocs(tabBlocY1[i], tabBlocY2[i]);
if(res){
tabResY[i] = 1;}
else tabResY[i] = 0;
}
for(i=0; i=16; i++){ //comparaison des blocs de la trame U
res = compBlocs(tabBlocU1[i], tabBlocU2[i]);
if(i){
tabResU[i] = 1;}
else tabResU[i] = 0;
}
for(i=0; i=16; i++){ //comparaison des blocs de la trame V
res = compBlocs(tabBlocV1[i], tabBlocV2[i]);
if(i){
tabResV[i] = 1;}
else tabResV[i] = 0;
}
// moyenne des resultats des blocs de chaque trame
for(i=0; i=32; i++){
resY += tabResY[i];}
Tu peux modifier tes messages avec l'icône en forme de crayon. Florent te recommande de poster ton code sur le forum de cette manière : <codetype="c"> TON CODE ICI </code>. Ainsi, il sera coloré et l'identation préservée. Ton message sera bien plus clair et agréable à lire.
Bonne continuation !
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
Je suis étudiante et j'ai un projet de traitement de video à faire. Seulement je me retrouve face au 1er probleme: comment lire une video!!
J'ai bcp cherché sur internet et j'en arrive à la conclusion que les librairies ffmpeg ou smpeg ne fonctionnent pas. J'ai donc fait un code, qui je pense devrait fonctionner et pourtant j'ai un message d'erreur : ""monprojet" a cessé de fonctionner".
Voici mon code
"PRINCIPAL.c":
#include <stdio.h>
#include <windows.h>
#include "algorithme.h"
// Le main n'est pas encore tout à fait terminé
int main(int argc, char* argv[])
{
int id, res;
char *nomFichier;
Image *imCourante, *imPrecedente;
long taille;
FILE *ptfile ;
// allocation de la memoire pour les images
imCourante = CreateImage ();
imPrecedente = CreateImage ();
// ouverture du fichier en lecture en mode binaire
ptfile = fopen(argv[1], "rb");
//id = open(argv[0], O_RDONLY | O_BINARY);
stockImage(ptfile, imPrecedente);
}
return 0;
}
"ALGORITHME.c"
#include <io.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "algorithme.h"
Image* CreateImage ( )
{
Image *img ;
img = malloc ( 3 * sizeof (Image*));
img -> bufY = malloc ( LONGUEUR_TRAME_Y * LARGEUR_TRAME_Y * sizeof (unsigned char));
img -> bufU = malloc ( LONGUEUR_TRAME_UV * LARGEUR_TRAME_UV * sizeof (unsigned char));
img -> bufV = malloc ( LONGUEUR_TRAME_UV * LARGEUR_TRAME_UV * sizeof (unsigned char));
return img;
}
//teste fin de parcours du fichier
//renvoie 0 si OK
int finFichier(int id, long tailleFichier){
long endroit = tell(id);
if((tailleFichier-endroit)<=0)
return 0;
else return 1;
}
//stockage d'une image à partir d'un fichier
void stockImage(FILE *ptfile, Image* image){
int resY, resU, resVz;
fread(image->bufY, sizeof(unsigned char), LONGUEUR_TRAME_Y*LARGEUR_TRAME_Y, ptfile);
fread(image->bufU, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
fread(image->bufV, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
}
}
//stockage d'une image à partir d'un fichier
void stockImage(FILE *ptfile, Image* image){
int resY, resU, resVz;
fread(image->bufY, sizeof(unsigned char), LONGUEUR_TRAME_Y*LARGEUR_TRAME_Y, ptfile);
fread(image->bufU, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
fread(image->bufV, sizeof(unsigned char), LONGUEUR_TRAME_UV*LARGEUR_TRAME_UV, ptfile);
}
//comparaison de 2 blocs de pixels (comparaison au seuil)
//1 si differents, 0 si pareils
//resolution 11*9 -> 99 pixels par blocs, 297 entiers
int compBlocs(unsigned char* bloc1, unsigned char* bloc2){
int res, i;
unsigned char tabRes[99]; //contient les resultats par pixel
for(i=0; i=99; i++){
if((bloc1[i]<=bloc2[i]+VALEUR_PIXEL) && (bloc1[i]<=bloc2[i]-VALEUR_PIXEL)){ //test d'encadrement de la valeur d'un pixel
tabRes[i] = 1;}
else tabRes[i] = 0;
}
for(i=0; i=99; i++){
res+=tabRes[i];}
res = res/99;
if(res>=SEUIL_BLOC){
return 0;}
else return 1;
}
//comparaison des deux images (moyenne des blocs et comparaison au seuil)
//renvoie 1 si elles sont differentes, 0 si elles sont pareilles
int compImages(Image* im1, Image* im2){
unsigned char tabBlocY1[32], tabBlocU1[16], tabBlocV1[16], tabBlocY2[32], tabBlocU2[16], tabBlocV2[16];
unsigned char tabResY[32], tabResU[16], tabResV[16];
int i, res, resY, resU, resV;
divisBlocs2(im1, tabBlocY1, tabBlocU1, tabBlocV1); //division des trames en blocs
divisBlocs2(im2, tabBlocY2, tabBlocU2, tabBlocV2);
for(i=0; i=32; i++){ //comparaison des blocs de la trame Y
res = compBlocs(tabBlocY1[i], tabBlocY2[i]);
if(res){
tabResY[i] = 1;}
else tabResY[i] = 0;
}
for(i=0; i=16; i++){ //comparaison des blocs de la trame U
res = compBlocs(tabBlocU1[i], tabBlocU2[i]);
if(i){
tabResU[i] = 1;}
else tabResU[i] = 0;
}
for(i=0; i=16; i++){ //comparaison des blocs de la trame V
res = compBlocs(tabBlocV1[i], tabBlocV2[i]);
if(i){
tabResV[i] = 1;}
else tabResV[i] = 0;
}
// moyenne des resultats des blocs de chaque trame
for(i=0; i=32; i++){
resY += tabResY[i];}
for(i=0; i=16; i++){
resU += tabResU[i];
resV += tabResV[i];}
resY = resY/32;
resU = resU/16;
resV = resV/16;
// comparaison avec le SEUIL_IMAGE
if(resY>=((int)SEUIL_IMAGE) || (resU>=(int)SEUIL_IMAGE) || (resV>=(int)SEUIL_IMAGE)){
return 0;}
else return 1;
}
}
//frames U et V
for(i=0; i=LONGUEUR_TRAME_UV; i+=LONGUEUR_BLOC){
for(j=0; j=LARGEUR_TRAME_UV; j+=LARGEUR_BLOC){
tabBlocU[(i/LONGUEUR_BLOC)+(j/LARGEUR_BLOC)*LONGUEUR_TRAME_UV/LONGUEUR_BLOC] = image->bufU[i+(j*LONGUEUR_TRAME_UV)];
tabBlocV[(i/LONGUEUR_BLOC)+(j/LARGEUR_BLOC)*LONGUEUR_TRAME_UV/LONGUEUR_BLOC] = image->bufV[i+(j*LONGUEUR_TRAME_UV)];
}
}
}
Perso j'ai utilisé Gstreamer pour lire des vidéos, c'est assez facile d'utilisation (si tu lis leur manuel et que tu te débrouilles un prog) et c'est assez puissant si tu veux aller loin !
Je précise que moi, c'est une erreur, rien à voir avec le sujet, je me suis carrément planté de sujet. ^^"
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles- ♡ Copying is an act of love.
lecture fichier argv
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.