J'essaie de traiter chaque image dans une paire de fichiers vidéo dans OpenCV, puis d'écrire les images résultantes dans un fichier avi en sortie. Tout fonctionne, sauf que le fichier vidéo de sortie semble étrange: au lieu d'une image solide, l'image est répétée trois fois et compressée horizontalement de sorte que les trois copies correspondent à la fenêtre. Je soupçonne qu'il y a quelque chose qui ne va pas avec le nombre de canaux que l'auteur attend, mais je lui donne des images à un seul canal 8 bits à écrire. Voici le réglage avec lequel je suis mon initialisation Videowriter:OpenCV - VideoWriter produit une vidéo avec une image "répétée"
//Initialize the video writer
CvVideoWriter *writer = cvCreateVideoWriter("out.avi",CV_FOURCC('D','I','V','X'), 30, frame_sizeL, 0);
Quelqu'un at-il rencontré cette sortie étrange de la Videowriter OpenCV avant? J'ai vérifié les images résultantes avec cvSaveImage juste pour voir si mon processus de traitement est en train de créer l'image "triplée", mais ce n'est pas le cas. C'est seulement quand j'écris à la sortie avi avec cvWriteFrame que l'image est "triplée" et compressée. Edit: J'ai découvert que cela n'arrive que lorsque j'essaie d'écrire des images à un seul canal en utilisant une trame d'écriture. Si j'écris des images RVB 8 bits à 3 canaux, la vidéo de sortie est correcte. Pourquoi ça fait ça? Je passe correctement "0" pour l'argument de couleur lors de l'initialisation de CvVideoWriter, donc il devrait s'attendre à des images monocanal.
Je crois que oui. Le dernier argument de cvCreateVideoWriter indique s'il faut ou non s'attendre à des images en couleur. Je passe définitivement un 0 au dernier argument comme vu ici: cvCreateVideoWriter ("out.avi", CV_FOURCC ('D', 'I', 'V', 'X'), 30, frame_sizeL, 0); L'en-tête de fonction pour le cvCreatevideoWriter est la suivante: typedef struct CvVideoWriter CvVideoWriter CvVideoWriter * cvCreateVideoWriter (const char * nom de fichier, int fourcc, double ips, CvSize frame_size, int is_color = 1) Dois-je utiliser la syntaxe C++ de style pour la mise en place de l'écrivain vidéo plutôt que les fonctions de style c? – user375357
Shoot Je viens de remarquer que la documentation dit "(le drapeau est actuellement supporté sur Windows uniquement)". J'utilise Linux, donc est-ce que cela signifie qu'il n'y a aucun moyen d'obtenir le videoWriter pour accepter les images en niveaux de gris? – user375357
Solution obsolète est de faire une image en niveaux de gris 3C en mettant simplement la même valeur dans les canaux RVB. La plupart des formats vidéo attendent RGB (ou HSV) plutôt que le canal unique –