OpenCV为何只保存视频的前景帧后得到的是无效的文件?附代码
OpenCV为什么只保存视频的前景帧后得到的是无效的文件?附代码
b.avi是一个6K的无效文件
------解决方案--------------------
学习下!
------解决方案--------------------
恭喜,接分
------解决方案--------------------
呵呵,怎么解决的?存的是个图片吧:)
- C/C++ code
#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的无效文件
------解决方案--------------------
学习下!
------解决方案--------------------
恭喜,接分
------解决方案--------------------
呵呵,怎么解决的?存的是个图片吧:)