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; } }}