如何使用 OpenCV (c++) 存储序列中的所有帧

How to store all frames from a sequence with OpenCV (c++)?

本文关键字:存储 OpenCV 何使用 c++      更新时间:2023-10-16

我试图将帧序列与这样的电影分开:

void storeSequence() {
Mat frame;
VideoCapture vid("myVideo.mp4");
if (!vid.isOpened()) {
    return;
}
int fps = 30;
int count = 0;
bool cut = false;
vector<Mat> frames;
bool capture = true;
while (capture) {
    vid >> frame;
    imshow("video", frame);
    char character = waitKey(1000 / fps);
    Mat outMat;
    switch (character) {
            case 'c':
        cut = !cut;
        break;
    case 27:
        return;
    case 'x':
        capture = false;
    }
    if (cut) {
        frame.copyTo(outMat);
        frames.push_back(outMat);
        count++;
    }
    if (!capture) break;
}
cout << count << endl;
for (int i = 0; i < count; i++) {
    stringstream fn;
    Mat img = frames[i];
    fn << "seq1_" << i << ".jpg" << endl;
    imwrite(fn.str(), img);
}
}

显示视频,在我按 c 两次后,然后按 x 控制台告诉我矢量"帧"中存储了多少帧,但没有图像写入我的文件目录中。我错过了什么?(或者有更好的选择来分离序列吗?

fn << "seq1_" << i << ".jpg" << endl;更改为fn << "seq1_" << i << ".jpg";当您在末尾添加 endl 时,您的字符串看起来像这样"seq1_0.jpgn"蚂蚁这是错误的路径。