2012-04-05 6 views
1

hey j'ai essayé de faire la soustraction entre trame courante précédente, (le code ci-joint) le code en cours d'exécution mais je reçois des erreurs et fenêtre grise sans résultat les erreurs i got sur l'invite de commande:cadres de soustraction OpenCV

compilateur n'a pas aligner les variables de la pile. Libavcodec a été mal codé et peut être très lent ou accidenté. Ce n'est pas un bogue dans libavcodec, mais dans le compilateur. Vous pouvez essayer de recompiler en utilisant gcc> = 4.2. Ne signalez pas les plantages aux développeurs FFmpeg. Erreur OpenCV: Échec de l'assertion (src1.size() == dst.size() & & src1.type() == type.dst()) dans une fonction inconnue, fichier ........ \ ocv \ opencv \ src \ cxcore \ cxarithm.cpp, ligne 1563.

quelqu'un a une idée? s'il vous plaît votre aide !! merci

int main() 
{ 


int key = 0; 




CvCapture* capture = cvCaptureFromAVI("macroblock.mpg"); 
IplImage* frame = cvQueryFrame(capture); 
IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1); 
IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1); 

    if (!capture) 

{ 
    fprintf(stderr, "Cannot open AVI!\n"); 
    return 1; 
    } 

    int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); 

    cvNamedWindow("dest", CV_WINDOW_AUTOSIZE); 

    while(key != 'x') 
     { 
      frame = cvQueryFrame(capture); 
    currframe = cvCloneImage(frame);// copy frame to current 
    frame = cvQueryFrame(capture);// grab frame 
    cvSub(frame,currframe,destframe);// subtraction between the last frame to cur 

      if(key==27)break; 
      cvShowImage("dest",destframe); 
      key = cvWaitKey(1000/fps); 
      } 
     cvDestroyWindow("dest"); 
     cvReleaseCapture(&capture); 
     return 0; 

}

Répondre

3

Le problème ici est

IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1); 
IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1); 

Ce que vous faites est que vous lisez hors mpeg qui a 3 voies par trame. Maintenant, lorsque vous faites la soustraction, vous soustrayez une trame à 3 canaux d'une trame à 1 canal. Cela causera des problèmes. Essayez de régler le nombre de canaux à 3. Et si cela fonctionne

IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3); 
IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3); 

Pour être sûr, vérifiez le nombre de canaux pour l'image interrogé, l'image clonée. Et puisque vous poussez l'image finale dans une image de destination de 1 canal. Là, vous corrompez les données. Si aucune exception n'est levée/attrapée à aucun endroit.

OpenCV Error: Assertion failed (src1.size() == dst.size() && src1.type() == dst. type()) 

L'échec de l'assertion semble être un indicateur clair de ce que j'ai expliqué.

+0

merci beaucoup !!! –