- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我试图通过将图像(帧)组合成一张图像并通过基于预设 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");
}
}
}
当我运行这段代码时,我基本上会得到一个看起来好像是单帧的静止图像。这是一个例子:
在我知道会有多少帧的情况下,有谁知道如何从视频帧中产生所需的长时间曝光图像效果?
最佳答案
首先,(可能这不是您的情况,因为您指出您正在处理视频而不是相机)如果您的代码基于帧速率的值,请确保 30fps 是有效值而不是最大值。有时相机会根据从环境中获得的光量自动调整该数字。如果它是黑暗的,那么曝光时间会增加,因此帧率会降低。
第二点,给定一堆像素,很难模拟照片曝光的真实机制。想象一下,你想将曝光时间加倍,这应该通过两个连续的帧来模拟。在现实世界中,将曝光时间加倍意味着快门速度减半,因此有两倍的光线照射到传感器或胶片上,结果就是更亮的图像。
你如何模拟这个?为简单起见,考虑您要合并的两个非常明亮的灰度图像的情况。如果在给定点的像素值是 180 和 181,那么结果值是多少?第一个答案是 180+181,但像素强度介于 0 和 255 之间,因此必须在 255 处截断。增加曝光的真实相机可能会表现不同,没有达到最大值。
现在我会考虑你的代码。
第一次处理图像(即运行函数)时,只需将帧存储在变量 _exposed 中。
第二次混合新帧的 29/30 和之前存储的图像的 1/30。
第三帧的第三次 29/30 与先前操作的结果。这会导致在第一帧上放置一个逐渐消失的权重,该权重实际上消失了。
上次调用该函数时,再次将最后一帧的 29/30 和前一帧的 1/30 相加。反过来,这意味着第一帧的效果实际上消失了,甚至前一帧也仅占 29/(30x30) 的份额。您获得的图像只是最后一帧,前一帧略有模糊。
如何获得曝光模拟?如果您只想平均 30 帧,则必须替换以下行:
if (_frameCount == 0) {
_exposed = image.clone();
addWeighted(_exposed, 0.0, image, alpha, 0.0, _exposed);
} else {
addWeighted(_exposed, 1.0, image, alpha, 0.0, _exposed);
}
_frameCount++;
如果你也想让图像在某种程度上更亮,你可以通过一个乘数来模拟它:
if (_frameCount == 0) {
_exposed = image.clone();
addWeighted(_exposed, 0.0, image, alpha*brightfactor, 0.0, _exposed);
} else {
addWeighted(_exposed, 1.0, image, alpha*brightfactor, 0.0, _exposed);
}
_frameCount++;
将亮度因子调整为最能模拟曝光时间实际增加的值。 (编辑:1.5 和 2.5 之间的值应该可以完成这项工作)
关于c++ - 从视频帧 OpenCV 模拟长时间曝光,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377832/
我正在使用navigator.getUserMedia限制访问用户的网络摄像头,使用提要作为 HTML 的源 然后将其流复制到 drawImage一个语境。我这样做是为了每隔一段时间就拍一张快照。 我
我有一个数据层(包含与 MongoDB 的连接)、一个域层(包含存储库和实体)和一个服务层(包含服务和模型) 现在因为我的实体使用 ObjectId,它们需要 MongoDB 的知识(这样可以吗?)
现在在我的相机应用程序中,我允许用户触摸任意位置来设置焦点和曝光,但我如何才能像 Apple 的相机应用程序一样获得两全其美的效果? 例如,用户可能希望通过触摸来聚焦前景中的某物,但如果场景变化足够大
我想实现标准的用户体验,在预览中点击一个点,以将自动对焦和自动曝光点调整到他们点击的位置。我找到了 Preview.focus() 函数,但是它说它需要“传感器坐标系”中的尺寸,我假设它与 Textu
我需要对大量照片进行排序,去除模糊图像(由于相机抖动)、曝光过度/不足的图像,并检测图像是横向还是纵向拍摄。这些事情可以使用图像处理库在图像上完成吗?或者它们仍然超出算法解决方案的范围吗? 最佳答案
我正在尝试调整网络摄像头的亮度。我需要 3 张不同亮度设置的不同照片。我不想让它成为手动的,所以如果想在程序中包含设置。 下面是我正在使用的代码。使用方法 GetFrame() 可以从网络摄像头获取下
我目前被困在图片视频项目上。 问题: 我正在从 UE4 中提取图片,由于一个错误,在屏幕截图的渲染过程中并未考虑所有灯光。输出是 HDR 图像。我想获得更好的亮度,因为导出的图片很暗,就像第一次曝光一
在过去的两天里,我遇到了 docker 问题,但我可以得到它。按照 docker 文档,您可以使用 EXPOSE 公开容器将监听连接的端口。到目前为止,一切都很好! 如果我的应用程序在端口 8080
自一周以来,我一直在尝试为我的 IOS 应用实现一些图像处理滤镜,如白平衡、曝光和分割色调(如在 Photoshop 中),但我没有获得实现其中任何一个的标准实现。 我通过ImageMagick找到了
据外媒 LOGGER 消息,小米手环 6 的信息在另一款智能手环应用Zepp中泄露。这款应用的固件代码中,出现了 “MI Smart Band 6”字样,还展现了其通过中国无线电认证的 CMIIT
据外媒Samsung Mobile报道,消息人士称,三星即将推出的Galaxy Watch智能手表将具有物理表圈。我们暂时将其称为Galaxy Watch 2。 去年,三星在八个月的时间内发布了两
我正在快速开发一个 MAC 应用程序,我现在可以在 NSView 上预览相机,我想更改亮度/对比度/白平衡和所有与相机相关的设置。 我正在使用 AVFoundation 框架来预览相机,我有 slid
据外媒 gsmarena 报道,realme Watch 2 已经通过了FCC 认证,并且被曝光了完整的设计规格。 realme Watch 2 代号为 RMW2008,屏幕方面与上一代相同,采用
我是一名优秀的程序员,十分优秀!