【问题标题】:Is there a way to remove GoPro fisheye using ffmpeg有没有办法使用 ffmpeg 删除 GoPro 鱼眼
【发布时间】:2015-08-30 04:27:53
【问题描述】:

借助lenscorrection 过滤器,似乎可以使用 ffmpeg 补偿鱼眼失真:

ffmpeg -i in.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-.25:k2=-.25" out.mp4

k1k2 的值是多少,尤其是对于 gopro? 有没有办法计算它们?

【问题讨论】:

标签: video ffmpeg fisheye gopro


【解决方案1】:

我认为没有一个通用的设置可以涵盖所有 GoPro 型号和镜头。还要考虑到人们可以使用一些定制/替换镜片。

我希望有一个示例图片,其中包含您必须使用的内容,但没关系...
希望以下内容对您有所帮助

查看此链接以获取GoPro Hero 3 settings(适用于其他型号)。要大致了解最佳 k1k2 值,您应该找到最接近图像分辨率的纵横比...

H. FOV deg 除以V. FOV deg 并将结果与​​Diag. FOV deg 相乘。

示例:图片尺寸为 1920 x 1080:这使其成为 16:9 宽屏。

GoPro 3 设置:16 x 9 宽屏 ::H fov = 69.5 || V fov = 118.2 || Diag = 133.6

所以118.2 / 69.5 * 133.6 = 227.216 etc

对于k1,结果现在是整数227(去掉小数点)。

对于k20.022 的值似乎是通用的(所有测试图像),因此您可以尝试k2=-.022

对于cxcy,将它们保留为:cx=0.5:cy=0.5:

例子:

ffmpeg -i in.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-0.227:k2=-0.022" out.mp4

结果:(通过 Google images 找到 GoPro Hero-2 视频的原始图像)。

【讨论】:

  • 太棒了!您刚刚赢得了赏金;)但是,您能再解释一下 k2 值吗?为什么它是“通用的”?再次感谢
  • @abernier 谢谢。关于k2,与其说它是通用的,不如说它适用于那种鱼眼镜头。我的测试图片都具有“圆圈内的图像”类型的外观(带有黑色边缘)。全景镜头可能不是最好的(图像失真,但屏幕没有黑边)。我现在正在执行任务,但今晚晚些时候会更新更多信息/示例。
【解决方案2】:

对于 GoPro Hero 5 和 6:

ffmpeg -i input.mp4 \
    -vf 'lenscorrection=k2=0.006:k1=-0.18' \
    output.mp4

source

【讨论】:

    【解决方案3】:

    FFmpeg 有一个lenscorrection 过滤器,可用于校正视频中的径向失真。也就是说,如果没有更多背景信息(例如相机的型号和设置),就很难提供更多信息。我怀疑无论如何这都需要一些反复试验。

    PS:你试过在WINE下运行相机软件吗?它的某些版本显然预定义了这种校正过滤器并且易于访问。

    【讨论】:

    • 感谢您的回答,但我正在寻找镜头校正的 ffmpeg 参数(或其他开源,不使用 3rd 方软件)。
    • 是的,谢谢你的回答,但 k1k2 的具体值对于 gopro 来说会很棒
    【解决方案4】:

    对于 GoPro 3+,16:9 和 FOV Wide

    ffmpeg -i input.mp4 -vf "lenscorrection=0.5:0.5:-0.335:0.097" output.mp4
    

    【讨论】:

      【解决方案5】:

      您可以使用 ffmpeg 的 lenscorrection 修复鱼眼,但结果会在边缘看起来很糟糕。

      【讨论】:

        【解决方案6】:

        我写了a post,介绍了使用 ffmpeg 校正失真的各种方法 - 我认为 lensfunv360 滤镜比镜头校正滤镜更好。

        也就是说,理论上您应该能够使用 OpenCV-calibrateCamera 函数计算 k1 和 k2 的值。您可能希望使用标志CALIB_FIX_PRINCIPAL_POINT(以及将主点固定在图像中心的坐标,如 lenscorrection 假设)、CALIB_FIX_K3(因为 lenscorrection 不使用k3)和CALIB_FIX_S1_S2_S3_S4(因为镜头校正不考虑切向畸变)。有可用的示例代码,您可以简单地对其进行修改。

        但是,当我尝试时,我卡住了,因为在 OpenCV 中我找不到固定焦距的方法,但在镜头校正中,焦距被硬编码为图像对角线的一半。

        【讨论】:

          猜你喜欢
          • 2016-10-14
          • 2022-01-13
          • 2010-09-16
          • 1970-01-01
          • 1970-01-01
          • 2018-04-18
          • 1970-01-01
          • 2016-05-20
          • 1970-01-01
          相关资源
          最近更新 更多