有没有办法在ffmpeg中应用曲线折弯?

时间:2019-10-28 15:55:07

标签: ffmpeg

我有四个摄像头,每个摄像头都为我提供了篮球场的不同部分。由于摄像机的实际位置略有偏移以及摄像机边缘周围的镜头变形,因此我无法在没有某种校正的情况下简单地将视频拼接在一起。

我研究了ffmpeg的perspective过滤器以及lenscorrection过滤器。在前一种情况下,它只能创建梯形,而不能生成我想要的弯曲图像。在后一种情况下,对k1k2使用负值似乎是朝正确的方向前进,但是它会使图像的顶部和底部失真至无意义的噪点,或者放大了太多了,以至于我丢失了重要的细节。

对于下面的示例图片,最终我希望中场线(右侧的蓝色垂直线)是垂直的,并且我希望底部白色桌子上的一堆电线保持可见和可识别。 / p>

给出如下视频:

enter image description here

我希望产生如下内容:

enter image description here

此图像是使用GIMP中的“曲线弯曲”滤镜制作的,但我只是盯着它看-所以它并不完美。理想情况下,一旦获得确切的参数,中场线将 完全垂直

使用lenscorrection过滤器时,k1k2的值似乎没有达到我想要的效果:

k1,负k2

enter image description here

k1,正k2

enter image description here

正面k1,负面k2

enter image description here

正面k1,正面k2

enter image description here

通常:

  • 负/负使图像失真至无法识别
  • 阴性/阳性 看起来不错,但中场线不在屏幕上,尚不清楚是否应用了任何失真
  • 正/负看上去最好,但实际上左右两侧的顶部和底部弯曲时会凸出,使中场线变形
  • 阳性/阳性与预期效果相反

2 个答案:

答案 0 :(得分:3)

我写了a post关于这个主题的书。奇怪的是,我还试图扭曲篮球场的视频。

有一些选择:

  1. 尝试找到与相机产生的投影大致匹配的标准投影(例如,鱼眼,立体影像等),然后查找或测量相机的视场。此时,您可以使用新的v360滤镜将图像校正为直线投影(在现实生活中,直线在图像中保持直线)。
  2. lensfun中为您的相机找到一个数据库条目,或者创建一个(在其文档中有说明),或者发送图片并要求维护者进行操作。然后,您可以使用lensfun过滤器来准确校正失真。

Lensfun如果想要准确的话可能是最好的选择,但是根据相机的不同,v360可能会产生足够好的结果,并且速度明显更快。

答案 1 :(得分:0)

简短的回答:否。FFMPEG没有弯曲功能。也就是说,无论如何弯曲都是不合适的。镜头校正 是必要的,提供的参数还差得远。

最终,我只是编写了一个脚本,使用lensfun通过不同的镜头转储数千张图像,然后将它们略写为一个看起来不错的