Как сохранить все кадры из последовательности с OpenCV (c ++)? - PullRequest
0 голосов
/ 21 января 2019

Я пытался отделить последовательность кадров из фильма следующим образом:

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, консоль сообщает мне, сколько кадров хранится в векторе "frames", но в моем файловом каталоге не записывается изображение. Чего мне не хватает? (Или есть еще лучший вариант для разделения последовательности?)

1 Ответ

0 голосов
/ 21 января 2019

Изменить fn << "seq1_" << i << ".jpg" << endl; на fn << "seq1_" << i << ".jpg"; Когда вы добавляете endl в конце, строка Yout выглядит следующим образом "seq1_0.jpg\n" и это неправильный путь.

...