2013-02-13 4 views
0

Je veux lire et montrer une vidéo en utilisant opencv. J'ai enregistré avec Direct-show, le codec vidéo a UYVY (4: 2: 2), puisque opencv ne peut pas lire ce format, je veux convertir le codec en un modèle de couleur RVB, j'ai lu sur ffmpeg et je veux savoir s'il est possible d'en finir avec ça? si ce n'est pas le cas, si vous me suggérez, je serai reconnaissant.convertir un UYVY FFmpeg

+0

'UYVY' est l'un des formats de pixels [populaires]. Vous pouvez certainement lire à partir de ce fichier en utilisant l'API DirectShow, toutes les méthodes standard. La conversion en RVB est intégrée à Windows. Il est difficile de dire pourquoi vous ne pouvez pas utiliser le fichier que vous avez créé. –

+0

Je sais lire mais je ne sais pas comment le convertir ' – Engine

+0

Je n'ai jamais entendu parler de ** RBB **, qu'est-ce que c'est? – karlphillip

Répondre

1

Comme I explained to you before, OpenCV peut lire certains formats de YUV, y compris UYVY (grâce à FFmpeg/GStreamer). Donc, je crois que le cv::Mat que vous obtenez de la caméra est déjà converti dans l'espace colorimétrique BGR qui est ce que OpenCV utilise par défaut.

Je modifié mon previous program pour stocker la première image de la vidéo au format PNG:

cv::Mat frame; 
if (!cap.read(frame)) 
{ 
    return -1; 
}    

cv::imwrite("mat.png", frame); 

for(;;) 
{ 
// ... 

Et l'image est parfaite. L'exécution de la commande file sur mat.png révèle:

mat.png: PNG image data, 1920 x 1080, 8-bit/color RGB, non-interlaced 

Un test plus précis serait de vider l'ensemble frame.data() sur le disque et l'ouvrir avec un éditeur d'image. Si vous faites cela, gardez à l'esprit que les canaux R et B seront commutés.

Questions connexes