【问题标题】:Failing to use VideoWriter for writing from a webcam capture无法使用 VideoWriter 从网络摄像头捕获写入
【发布时间】:2014-07-10 10:35:48
【问题描述】:

我正在尝试将网络摄像头中的记录写入文件。为此,我使用以下代码。我一直收到退出代码 2。有人可以帮我找出问题所在吗? 我以前使用过类似的函数调用将帧从一个视频文件写入一个新的文件,它在那里工作。无法理解在这种情况下有什么问题。

代码片段如下:

int main(int argc, char *argv[]){

 cv::Mat frame;
 cv::VideoCapture cap(0);
 cv::BackgroundSubtractorGMG bg;
 bg.numInitializationFrames=120;
 bg.decisionThreshold = 0.95;
 bg.maxFeatures = 10; 

 double fps = cap.get(CV_CAP_PROP_FPS);
 CvSize frameSize;
 frameSize.height = cap.get(CV_CAP_PROP_FRAME_HEIGHT);
 frameSize.width = cap.get(CV_CAP_PROP_FRAME_WIDTH);
 VideoWriter VW1("resultbuff.avi",CV_FOURCC('M','P','E','G'), fps, frameSize, 1);
 VideoWriter VW2("recordingbuff.avi",CV_FOURCC('M','P','E','G'), fps, frameSize, 1);
 VideoWriter VW3("finalResult.avi",CV_FOURCC('M','P','E','G'), fps, frameSize, 1);


 if (!VW1.isOpened())
 {
     std::cout << "!!! Output video could not be opened" << std::endl;
     return 2;
 }

 if (!VW2.isOpened())
 {
     std::cout << "!!! Output video could not be opened" << std::endl;
     return 3;
 }

 if (!VW3.isOpened())
 {
     std::cout << "!!! Output video could not be opened" << std::endl;
     return 4;
 }

如前所述,程序以代码 2 退出。

【问题讨论】:

  • 双 fps = cap.get(CV_CAP_PROP_FPS); // 这里返回 0。不要认为网络摄像头支持它。尝试一个固定的数字,比如 25
  • 试过了。没用。仍然以返回码 2 退出。
  • 对我有用(使用不同的编解码器)。确定你有写权限?
  • 您使用的是什么编解码器?如何找到要使用的正确编解码器?
  • 尝试-1而不是FOURCC(这里没有通用的解决方案,这取决于你的ffmpg、os等)

标签: c++ opencv runtime-error


【解决方案1】:

好的,我找到了答案。这是dll错误。我在调试模式下运行程序,链接的 openCV dll 用于发布模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多