2012-02-15 6 views
0

カラービデオを読み込み、出力をグレースケールのビデオとして表示したいと考えています。以下は、私が実行しているコードですが、出力は同じカラービデオです。誰でも問題を特定できますか?ビデオをカラーからグレースケールに変換

//Convert a video to grayscale 
//argv[1]: input video file 
//argv[2]: name of new output file 

#include "cv.h" 
#include "highgui.h" 

int main(int argc, char* argv) { 
CvCapture* capture = cvCaptureFromAVI("C:\\walking\\lady walking.avi"); 
if(!capture){ 
    return -1; 
} 

IplImage *bgr_frame=cvQueryFrame(capture);//Init the video read 
double fps = cvGetCaptureProperty (
    capture, 
    CV_CAP_PROP_FPS 
    ); 

CvSize size = cvSize(
    (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH), 
    (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT) 
    ); 

CvVideoWriter *writer = cvCreateVideoWriter(
    "Output video",//filename for new file 
    CV_FOURCC('M','J','P','G'),//video codec to compress video stream 
    fps, 
    size 
    ); 
IplImage* logpolar_frame = cvCreateImage(
    size, 
    IPL_DEPTH_8U, 
    3 
    ); 
while((bgr_frame=cvQueryFrame(capture)) != NULL) { 
    cvLogPolar(bgr_frame, logpolar_frame, 
     cvPoint2D32f(bgr_frame->width/2, 
     bgr_frame->height/2), 
     40, 
     CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS); 
    cvWriteFrame(writer, logpolar_frame); 
} 
cvReleaseVideoWriter(&writer); 
cvReleaseImage(&logpolar_frame); 
cvReleaseCapture(&capture); 

IplImage*image; 
CvCapture*recorder = cvCaptureFromAVI("C:\\walking\\lady walking.avi"); 
cvNamedWindow("Output video",1); 
while(1) { 
    image=cvQueryFrame(recorder); 
    if(image==NULL) 
    { 
     break; 
    } 
    cvShowImage("Output video",image); 
    char c= cvWaitKey(30); 
    if(c==27) 
    { 
     break; 
    } 

} 
cvReleaseCapture(&capture); 
cvDestroyWindow("Output video"); 
return 0; 
} 

答えて

2

あなたの問題は、あなたが「出力ビデオ」ウィンドウに表示されている映像は、実際にあなたの「女性はwalking.avi」入力された映像ではなく、ビデオあなたの出力であること単にであるかのように私には見えます。

+0

うわー、私はそれを認識しませんでした。本当にありがとう –

関連する問題