OpenCV视频编写器在保存时更改视频

时间:2014-06-03 11:00:16

标签: c++ opencv video-capture video-processing

我尝试加载视频,进行一些颜色处理并保存。

我更改了第一个颜色分量,保存视频,再次打开它,但现在颜色分量不同了!

int main(int argv, char * argc) {
    std::string inVideo = "sample_sorenson.mov";
    std::string outVideo = "out.avi";



    cv::VideoCapture capturer(inVideo);
    if (!capturer.isOpened()) {
        std::cerr << "Failed to open video file";
        return 1;
    }



    cv::VideoWriter writer;
    writer.open(outVideo,
        CV_FOURCC_DEFAULT,
        capturer.get(CV_CAP_PROP_FPS),
        cv::Size(capturer.get(CV_CAP_PROP_FRAME_WIDTH), capturer.get(CV_CAP_PROP_FRAME_HEIGHT)));
    if (!writer.isOpened()) {
        std::cerr << "Failed to write video file";
        return 1;
    }



    cv::Mat frame;
    while (capturer.read(frame))
    {
        for (auto frameIt = frame.begin<cv::Vec3b>(), frameEnd = frame.end<cv::Vec3b>();
            frameIt != frameEnd;
            ++frameIt)
        {
            (*frameIt)[0] = 0;  // some actions here, but for simplification just 0
        }
        writer.write(frame);
    }
    capturer.release();
    writer.release();



    cv::VideoCapture outCapturer(outVideo);  // open written video
    if (!outCapturer.isOpened()) {
        std::cerr << "Failed to open video file";
        return 1;
    }
    while (outCapturer.read(frame))
    {
        for (auto frameIt = frame.begin<cv::Vec3b>(), frameEnd = frame.end<cv::Vec3b>();
            frameIt != frameEnd;
            ++frameIt)
        {
            assert((*frameIt)[0] == 0);  // NOT ZERO!!! WHY?!?!?!
        }
    }
}

颜色正在变化,但[0]不是零...... 请帮忙!

0 个答案:

没有答案