OpenCV为啥只保存视频的前景帧后得到的是无效的文件?附代码

OpenCV为什么只保存视频的前景帧后得到的是无效的文件?附代码

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/video/video.hpp>

#include <iostream>

using namespace cv;
using namespace std;

int main()
{
   Mat frame; 
   Mat foreground;   // 前景图片
   IplImage img;
   VideoCapture capture("a.avi");
   VideoWriter writer;
   CvCapture* capture1 = cvCreateFileCapture( "a.avi" );
   if (!capture1 || !capture.isOpened())
   {
      return 0;
   }

   double fps = cvGetCaptureProperty (capture1,CV_CAP_PROP_FPS);   //c++接口不知道怎么取。。
   CvSize size = cvSize((int)cvGetCaptureProperty( capture1, CV_CAP_PROP_FRAME_WIDTH),(int)cvGetCaptureProperty( capture1, CV_CAP_PROP_FRAME_HEIGHT));
   Size s(size.width, size.height);
//   CvVideoWriter* writer = cvCreateVideoWriter("b.avi",CV_FOURCC('D','X','5','0'), fps,size);
   writer.open("b.avi", CV_FOURCC('M','J','P','G'), fps, s);
   namedWindow("Extracted Foreground");
   namedWindow("Source Video");
   // 混合高斯物体
   BackgroundSubtractorMOG mog;
   bool stop(false);
   while (!stop)
   {
      if (!capture.read(frame))
      {
         break;
      }
      mog(frame, foreground, 0.01);
      threshold(foreground, foreground, 128, 255, THRESH_BINARY_INV);

      //img = foreground;
      // cvWriteToAVI( writer, &img );
      writer.write(foreground);
      // show foreground
      imshow("Extracted Foreground", foreground);
      imshow("Source Video", frame);
      if (waitKey(10) == 27)
      {
         stop = true;
      }
   }
}



b.avi是一个6K的无效文件

------解决方案--------------------
OpenCV为啥只保存视频的前景帧后得到的是无效的文件?附代码
学习下!
------解决方案--------------------
恭喜,接分
------解决方案--------------------
呵呵,怎么解决的?存的是个图片吧:)