c++ - 使用 OpenCV 将视频写入文件

标签 c++ opencv video

您好,我正在尝试从我的网络摄像头将视频写入我的计算机,但我一直收到我的编写器未打开的错误。我正在使用 windows 8 64 位、VS 2013 和 OpenCV 2.4.10。这是我正在使用的代码:

#include <opencv\highgui.h>
#include <opencv\cv.h>
#include <iostream>

using namespace cv;
using namespace std;

string intToString(int number){


    std::stringstream ss;
    ss << number;
    return ss.str();
}

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

    VideoCapture cap(0); // open the video camera no. 0

    VideoWriter writer;

    if (!cap.isOpened())  // if not success, exit program
    {
        cout << "ERROR INITIALIZING VIDEO CAPTURE" << endl;
        return -1;
    }

    char* windowName = "Webcam Feed";
    namedWindow(windowName, CV_WINDOW_AUTOSIZE); //create a window to display our webcam feed

    string filename = "C:\\thevideo.avi";
    int fcc = CV_FOURCC('D', 'I', 'V', '3');
    double fps = 20;
    cv::Size frameSize(cap.get(CV_CAP_PROP_FRAME_WIDTH), cap.get(CV_CAP_PROP_FRAME_HEIGHT));

    writer = VideoWriter(filename, fcc, fps, frameSize);

    if (!writer.isOpened())
    {

        cout << "the writer isnt opened" << endl;
        getchar();
        return -1;
    }




    while (1) {
        Mat frame;

        bool bSuccess = cap.read(frame); // read a new frame from camera feed

        if (!bSuccess) //test if frame successfully read
        {
            cout << "ERROR READING FRAME FROM CAMERA FEED" << endl;
            break;
        }

        writer.write(frame);

        imshow(windowName, frame); //show the frame in "MyVideo" window

        //listen for 10ms for a key to be pressed
        switch (waitKey(10)){

        case 27:
            //'esc' has been pressed (ASCII value for 'esc' is 27)
            //exit program.
            return 0;

        }


    }

    return 0;

}

谁能帮帮我?

最佳答案

我觉得使用有点困惑。你这样做:

VideoWriter writer;

然后

writer = VideoWriter(filename, fcc, fps, frameSize);

要么:

VideoWriter writer = VideoWriter(filename, fcc, fps, frameSize);

VideoWriter writer;
writer.open(filename, 0, fps, frameSize, 1);

也许这就是问题所在?

此外,在 writer.open() 中,最后一个参数是颜色设置。相应地设置它。我假设你有颜色输入。

此外,更复杂的事情可能是编解码器问题。我读到 OPENCV 只能写 AVI 文件。所以,我不确定它是否可以使用DIV3编解码器进行写入。调用作者:

writer = VideoWriter(filename, -1, fps, frameSize);

并查看可以使用哪些编解码器。

关于c++ - 使用 OpenCV 将视频写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27907651/

相关文章:

c++ - 在 Boost.Spirit 中解析开头之前的短语结尾

c++ - 如何找到使用 C++ 在注册表中注册的 DLL 的绝对路径?

c++ - C++ 中的字符串操作和文件 IO?

c# - HoughLinesP参数!单元?

audio - FFMPEG:组合多个过滤器时指定输出流类型

C++ 类变量 : Initialization vs. vector 的赋值和初始化

python - OpenCV 错误 : (-215) scn == 3 || scn == 4 in function ipp_cvtColor

python - 如何使用 x 和 y 坐标对点进行透视变换

ios - youtube-ios-player-helper消息: “This video is restricted. Try signing in with a Google Apps account.”

python - 如何用pygame播放视频?