2016-09-27 3 views
0

В настоящее время я работаю на Python и с помощью видеозахвата OpenCV и cv.imshow, чтобы показать видео. Я пытаюсь наложить наложение на этом видео, чтобы рисовать на нем, используя cv.line, cv.rectangle и т. Д. Каждый раз, когда кадр меняет его, он очищает изображение, которое было нарисовано, поэтому я надеюсь, что если бы я наложил наложение что-то вроде этого, что позволило бы мне нарисовать несколько изображений на видео без очистки. Любой совет? Спасибо, вперед!Как наложить наложение на видео

ответ

0

Вам нужны 2 объекта Mat - один для потоковой передачи камеры (скажем Mat_cam), а другой - для наложения (Mat_overlay).

Когда вы рисуете на главном окне, сохранить линии и объекты Rect на Mat_overlay, и убедитесь, что она не зависит от потокового видео

Когда следующий кадр получен, Mat_cam будет обновляться и его У меня будет следующий видеокадр, но Mat_overlay будет таким же, поскольку он не будет очищен/обновлен с каждой итерацией цикла for. Добавление Mat_overlay и Mat_cam с использованием взвешенного добавления даст вам желаемый результат.

+0

Я пробовал это, но я продолжаю получать эту ошибку: ошибка: .. \ .. \ .. \ modules \ core \ src \ arithm.cpp: 1287: error: (-209) Операция не является "массивом op array '(где массивы имеют одинаковый размер и одинаковое количество каналов), а также' массив op scalar ', а не' scalar op array 'в функции cv :: arithm_op .... Может быть, потому, что я использую функцию videoCapture загрузить мое видео? – kylejohnson1995

+0

Нет. Это потому, что два объекта Mat, которые вы добавляете, должны иметь одинаковый размер и одинаковое количество каналов, то есть оба должны быть трехканальными изображениями –

+0

Извините за другой плохой вопрос. Но как узнать, сколько каналов в моем видео? Я попытался использовать функцию копирования, но это не позволило мне с функцией videoCapture. – kylejohnson1995

0

Я не уверен, что правильно понял ваш вопрос. Что я получил от вашего вопроса, так это то, что вы хотите, чтобы наложение оставалось на вашем фрейме, потоковое из Videocapture, для этого простого решения - объявить свой «Mat_cam», (переменная потоковой передачи) вне цикла, который используется для захвата кадров, так что переменная «Mat_cam» не будет освобождаться каждый раз, когда вы ее зацикливаете.

Смежные вопросы