Ich mache ein Projekt für Videoüberwachung.
Ich kann die Umwandlung von RGB zu Grau nicht sehen; Ich bekomme ein schwarzes Fenster für das Grau.
Könnten Sie mir bitte bei dem Problem helfen? (Code im Anhang)
Wie kann ich den Unterschied zwischen dem aktuellen Frame und dem vorherigen Frame ermitteln?
Vielen Dank. IlanOpenCV RGB zu Grau
#include "stdafx.h"
#include <stdio.h> // For printf
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int main()
{
int key = 0;
CvCapture* capture = cvCaptureFromAVI("macroblock.mpg");
IplImage* frame = cvQueryFrame(capture);
IplImage* gray = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1);
cvCvtColor(frame, gray, CV_RGB2GRAY);
if (!capture)
{
fprintf(stderr, "Cannot open AVI!\n");
return 1;
}
int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
cvNamedWindow("video", CV_WINDOW_AUTOSIZE);
cvNamedWindow("grayvideo", CV_WINDOW_AUTOSIZE);
while(key != 'x')
{
frame = cvQueryFrame(capture);
if(key==27)break;
cvShowImage("video",frame);
cvShowImage("grayvideo",gray);
key = cvWaitKey(1000/fps);
}
cvDestroyWindow("video");
cvReleaseCapture(&capture);
return 0;
}
Sie sollten die C++ opencv api lernen. Wenn Sie das cv :: Mat-Objekt für Bilder verwenden, die einen eigenen Destruktor (und einen Ref-Zähler) haben, müssen Sie das IplImage * nicht manuell freigeben, was Sie in Ihrem Code vergessen haben. – Eric
Wenn diese Frage erfolgreich beantwortet wurde, sollten Sie die offizielle Antwort auswählen, indem Sie auf das Kontrollkästchen daneben klicken. Wenn nicht, sollten Sie Ihre eigene Antwort hinzufügen. – karlphillip