3 votes

La capture OpenCV boucle la vidéo/ne détecte pas la dernière image

Je suis en train de capturer un fichier avi et de le traiter. Mon code a fonctionné pendant un certain temps sans problème mais maintenant il ne semble pas s'arrêter après la capture de la dernière image de la vidéo. Au lieu de cela, il revient en boucle au début de la vidéo. Je ne comprends pas pourquoi cela se produit et je ne vois pas ce qui pourrait changer dans Eclipse ou OpenCV. J'ai essayé le même code sur mon PC Ubuntu avec la même vidéo et cela fonctionne sans problème. J'ai même essayé de réinstaller l'OS et les applications sans succès.

Exemple de code :

#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
Mat frame;
VideoCapture capture;
const string inputVideo = argv[1];

char buff[PATH_MAX];
getcwd( buff, PATH_MAX );
std::string fileName( buff );
fileName.append("/");
fileName.append(inputVideo);

capture.open(inputVideo);

while(true)
{
    capture >> frame;

    if(!frame.empty())
    {
        imshow("frame", frame);
    }
    else
    {
        printf(" --(!) No captured frame -- Break!");
        break;
    }

    int key = waitKey(10);
    if((char)key == 'c')
    {
        break;
    }
}

return 0;
}

Je l'exécute sur un Mac OS X (10.8.2), avec Eclipse Juno et OpenCV 2.4.3.

Tout conseil ou commentaire est apprécié. Merci d'avance

2voto

jmo Points 153

La solution que j'ai utilisée a été postée comme commentaire par @G B. Je suis en train de créer une solution pour qu'elle puisse être marquée comme telle.

J'ai utilisé capture.get(CV_CAP_PROP_POS_FRAMES) avant et après la saisie des images, si la valeur "après" est inférieure à la valeur "avant", alors j'ai atteint la fin de la vidéo.

1voto

Jegan S Points 91

Obtenez le nombre d'images comme ci-dessous,

int frameCnt = capture.get(CV_CAP_PROP_FRAME_COUNT);

Et vérifier pour sortir de la boucle quand le nombre d'images dépasse

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X