0

我想对一组捕获的(来自网络摄像头)OpenCV 图像或相应的浮点数组进行上采样(像素值不需要是离散整数)。不幸的是,上采样率并不总是整数,所以我不知道如何用简单的线性插值来做到这一点。有没有更简单的方法或图书馆来做到这一点?

4

4 回答 4

1

好吧,我不知道一个库来做帧率缩放。

但我可以告诉你,最合适的方式是自己做这件事,就是丢帧或加倍帧。

通过简单的线性像素插值混合图片不会提高质量,现在播放仍然会显得生涩甚至模糊。

为了正确插入帧速率,需要更复杂的算法。现代电视已经为此内置了硬件,而像 After-Effects 这样的视频编辑软件具有执行此操作的功能。

这些算法能够通过运动分析在图片之间创建。但这超出了小问题解决方案的范围。

因此,要么继续搜索您可以使用的现有库,要么通过丢弃/加倍帧来完成。

于 2010-08-10T11:25:42.700 回答
0

我不是 100% 熟悉视频捕获,所以我不确定“像素值不需要是离散整数”是什么意思。这是否意味着每个像素的颜色信息可能不是整数?

我假设“上采样率并不总是整数”,您的意思是您将从一种分辨率上采样到另一种分辨率,但您可能不会增加一倍或三倍。例如,不是 640x480 -> 1280x960,而是 640x480 -> 800x600。

一个简单的算法可能是:

对于较大网格中的每个像素

  • 将 x/y 值缩放到 0,1 之间(x 除以宽度,y 除以高度)
  • 按较小网格的宽度/高度缩放 ​​x/y 值 -> xSmaller, ySmaller
  • 通过浮点地板/天花板函数确定包含您的点的四个像素
  • 获取该矩形内点所在位置的 x/y 值,
    介于 0,1 之间(减去地板/天花板值 xSmaller、ySmaller)-> xInterp、yInterp
  • 从黑色开始,然后添加您的四种颜色,按每种颜色的 xInterp/yInterp 因子缩放

您可以通过创建一个查找表来映射像素-> xInterp/yInterp 值,从而加快多帧的速度

我确信有比线性插值(双线性等)更好的算法。这似乎是您希望在处理器级别进行优化的那种事情。

于 2010-08-10T10:47:30.840 回答
0

ImageMagick MagickWand库将使用适当的过滤算法调整图像大小 - 请参阅MagickResizeImage()函数(并使用 Sinc 过滤器)。

于 2010-08-10T10:47:45.360 回答
0

libswscale从 ffmpeg 项目中使用。它是最优化的,支持多种不同的重采样算法。

于 2010-08-10T13:36:02.130 回答