Обнаружение черного / пустого кадра в видео с помощью OpenCV
Я использую класс OpenCV 2.4.2 VideoCapture для захвата кадров из нескольких видео, и моя цель - сравнить кадры между видео для получения похожих видео (визуально похожих).
Я сталкиваюсь с двумя проблемами.
Видео содержат пустые / черные рамки. Я могу перебрать каждый отдельный кадр (во время захвата видео) и проверить пиксели и т. Д., Чтобы обнаружить эти кадры. Есть ли более быстрый и эффективный способ сделать это? У меня более 1 тыс. Видео, и каждое видео имеет около 5–20 тыс. Кадров [я снимаю 1 кадр в секунду]. Я пишу в C++.
Сравнивая две огромные матрицы, можно проверить, насколько они "похожи". В конце концов я вычисляю огромную матрицу для каждого видео, где строки соответствуют количеству кадров, а столбцы соответствуют размерности дескриптора, вычисляемого для каждого кадра. Если мне нужно сравнить два видео по сходству, я обнаружил, что самое простое - вычислить евклидову матрицу. Но опять же, ужасно неэффективно, если я масштабирую до 1000 видео.
Любые советы и предложения будут оценены.
Спасибо,
1 ответ
Что касается первой проблемы, я думаю, что cv::countNonZero - наиболее подходящий метод, он также работает очень быстро. cv::countNonZero возвращает количество ненулевых элементов во входном одноканальном массиве.