【发布时间】:2015-10-31 00:21:57
【问题描述】:
我正在尝试使用 Visualstudio 2013 中的 C++ 中的 OpenCV 将捕获的视频写入文件。程序似乎从我笔记本电脑上的网络摄像头捕获视频,并且还能够将每个帧保存为图像,但是当我将帧写入一个视频文件,我最终得到一个 6kb 的文件。程序没有给我任何错误,因为我已按照 OpenCV 文档中的说明进行操作。
我正在粘贴程序以供审核。请建议我如何使它成为一个成功的计划。
谢谢。
#include <stdio.h>
#include <iostream>
#include "opencv2\core\core.hpp"
#include "opencv2\highgui\highgui.hpp"
using namespace std;
using namespace cv;
int main()
{
VideoCapture video_capture(0);
if (!video_capture.isOpened())
{
cout << "Error in opening video feed!" << endl;
getchar();
return -1;
}
// Creating the window to view video feed
String window_name = "Video_Feed";
namedWindow(window_name, CV_WINDOW_AUTOSIZE);
//
Mat frame;
// Filename
String filename = "...\\first_recording.avi";
// four character code
int fcc = CV_FOURCC('M', 'P', '4', '2');
// frames per sec
int fps = 10;
// frame size
Size frame_size(CV_CAP_PROP_FRAME_WIDTH, CV_CAP_PROP_FRAME_HEIGHT);
VideoWriter video_writer = VideoWriter(filename,fcc,fps,frame_size,true);
if (!video_writer.isOpened())// || video_writer.isOpened == NULL)
{
cout << "Error in opening video writer feed!" << endl;
getchar();
return -1;
}
int frame_count = 0;
while (frame_count < 100)
{
bool cap_success = video_capture.read(frame);
if (!cap_success)
{
cout << "Error in capturing the image from the camera feed!" << endl;
getchar();
break;
}
imshow(window_name, frame);
//imwrite("cap.jpg", frame);
video_writer.write(frame);
switch (waitKey(10))
{
case 27:
return 0;
break;
}
frame_count++;
}
//scvReleaseVideoWriter;
destroyWindow(window_name);
return 0;
}
【问题讨论】:
-
可能的原因 - 库没有看到编解码器。尝试另一个 FourCC,例如“MJPG”。检查 FFMPEG 库是否可用(没有必要,但有时它们提供了更多可能性)
-
我不知道如何检查FFMPEG,请你解释一下。
-
我正在使用静态构建 - avcodec、libav 等 dll。我不知道你是否可以在 Visual Studio 中使用 .lib 文件或 dll。
-
谢谢。当我阅读更多关于 FFMPEG 的内容时,我正在逐行浏览程序,发现我对帧大小的声明只给了我 3X4 像素导致错误。当我手动更改尺寸以匹配相机拍摄的图像尺寸时,我可以毫无问题地进行编程。
标签: c++ visual-studio opencv