Я пытаюсь имитировать фотографию с длительным выдержкой, комбинируя изображения (кадры) в одно изображение и выполняя операции на основе предустановленной альфы. Я делаю это на iPhone, и в настоящее время у меня есть длина видео, установленная на 1 секунду (30 кадров). Альфа устанавливается на 1.0/frameCount
, однако я жестко закодирован в 30, чтобы представить одну секунду из 30 FPS видеозахвата. Я останавливаю операции, когда достигнет одной секунды видео /30 кадров. Идея заключается в том, что пользователь может установить таймер на х секунд, и я сделаю математику, чтобы выяснить, сколько кадров разрешено.
Вот код, который я использую:
- (void)processImage:(Mat&)image
{
if (_isRecording) {
// first frame
double alpha = 1.0/30;
if (_frameCount == 0) {
_exposed = image;
_frameCount++;
} else {
Mat exposed = _exposed.clone();
addWeighted(exposed, alpha, image, 1.0 - alpha, 0.0, _exposed);
_frameCount++;
}
// stop and save image
if (_frameCount == 30) {
_isRecording = NO;
_frameCount = 0;
cvtColor(_exposed, _exposed, CV_BGRA2RGB, 30);
UIImage *exposed = [LEMatConverter UIImageFromCVMat:_exposed];
UIImageWriteToSavedPhotosAlbum(exposed, nil, nil, nil);
NSLog(@"saved");
}
}
}
Когда я запускаю этот код, я в основном возвращаю неподвижное изображение, которое выглядит так, как будто это один кадр. Вот пример:
Кто-нибудь знает, как я могу произвести желаемый эффект изображения с длительным выдержкой из видеокадров, учитывая, что я знаю, сколько кадров будет?