ffmpeg - 有没有办法在ffmpeg中应用曲线弯曲?
问题描述
我有四个摄像头,每个摄像头为我提供篮球场的不同部分。由于相机物理位置的轻微偏移和相机边缘的镜头失真,我不能在没有某种校正的情况下简单地将视频拼接在一起。
我查看了 ffmpeg 的perspective
过滤器以及lenscorrection
过滤器。在前一种情况下,它只能创建一个梯形,而不是我想要的弯曲图像。在后一种情况下,使用负值k1
并且k2
似乎朝着正确的方向前进,但它要么使图像的顶部和底部扭曲到无意义的噪声点,要么它放大图像以至于我失去了重要的细节。
对于下面的示例图片,最终我希望中场线(右侧的蓝色垂直线)是垂直的,并且我希望底部白色桌子上的杂乱电线保持可见和可识别。
给定一个如下所示的视频:
我希望产生如下内容:
这张图片是使用 GIMP 中的“曲线弯曲”滤镜制作的,但我只是目不转睛地盯着它——所以它并不完美。理想情况下,一旦我得到确切的参数,中场线将完全垂直
使用lenscorrection
过滤器时,没有值k1
并且k2
似乎得到了我想要的效果:
消极k1
的,消极的k2
:
消极k1
的,积极的k2
:
正面k1
,负面k2
:
积极k1
的,积极的k2
:
一般来说:
- 负片/负片使图像无法识别
- 负/正看起来不错,但中场线不在屏幕上,不清楚是否应用了任何失真
- 正面/负面看起来最好,但左右中间的顶部和底部弯曲实际上凸出,使中场线扭曲
- 正面/正面与预期效果相反
解决方案
我写了一篇关于这个主题的帖子。奇怪的是,我还试图使篮球场的视频不失真。
有几个选项:
- 尝试找到与您的相机产生的投影大致匹配的标准投影(例如鱼眼、立体投影等),然后查看或测量相机的视场。此时,您可以使用新
v360
滤镜将图像校正为直线投影(这是现实生活中的直线在图像中保持笔直的投影)。 - 要么为您的相机找到一个数据库条目
lensfun
,要么创建一个(在他们的文档中有说明),或者发送图片并要求维护人员去做。然后您可以使用lensfun
过滤器来准确校正失真。
如果您希望它准确,Lensfun 可能是最佳选择,但根据您的相机,您可能会发现 v360 产生足够好的结果,而且速度明显更快。
推荐阅读
- kubernetes - 在 Kubernetes 中使用 Hazelcast 的 Sonatype Nexus HA
- python - 我是初学者,我正在努力学习学习 python,所以我对这个 python 代码有问题(if else 语句)
- flutter - 颤振 dio 中的等效代码与 android 改造 @body 相比是什么?
- javascript - 在谷歌图表中按时间过滤
- javascript - 同上 HTTP API 服务器发送事件 CORS 错误
- java - .sendKeys() 方法在我尝试设置值时不起作用
- java - 在 JUnit 5 中使用 spring 项目测试删除方法得到“未指定类型 [long] 的参数名称”错误
- elasticsearch - 为什么lucene的段是不可变的
- php - PHP Rest API 中数据对象版本控制的设计模式
- c# - 自定义模型绑定器以覆盖 BindProperty