【发布时间】:2015-10-01 09:22:31
【问题描述】:
我正在尝试通过将图像(帧)组合成一张图像并通过基于预设 alpha 的操作来模拟长时间曝光的照片。我在 iPhone 上执行此操作,我目前将视频长度设置为 1 秒(30 帧)。 alpha 设置为1.0/frameCount,但我硬编码为 30 以表示 30 FPS 视频捕获的一秒。一旦达到一秒的视频/30 帧,我就会停止操作。这个想法是用户可以设置一个 x 秒的计时器,我将计算出允许多少帧。
这是我正在使用的代码:
- (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");
}
}
}
当我运行这段代码时,我基本上会得到一个看起来好像是单帧的静止图像。这是一个例子:
如果我知道会有多少帧,有谁知道如何从视频帧中产生所需的长时间曝光图像效果?
【问题讨论】:
-
您的代码中的问题是您仅对 1 帧进行 30 次平均。
标签: c++ ios objective-c opencv