有没有办法使用ffmpeg删除GoPro鱼眼

时间:2015-06-14 17:12:40

标签: video ffmpeg fisheye gopro

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

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

k1k2有什么价值,特别是对于gopro? 有没有办法计算它们?

6 个答案:

答案 0 :(得分:14)

我认为没有一个通用的设置来涵盖所有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(删除小数点)。

对于k2,值0.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

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

答案 1 :(得分:4)

FFmpeg有一个lenscorrection滤镜,可用于纠正视频中的径向失真。也就是说,没有更多的上下文 - 例如相机的型号和设置 - 很难提供更多信息。我怀疑它无论如何都需要一些反复试验。

PS:您是否尝试在WINE下运行相机的软件?它的某些版本显然具有预定义且易于访问的这种校正滤波器。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

对于GoPro Hero 5和6:

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

source

答案 4 :(得分:1)

对于GoPro 3 +,16:9(具有FOV宽屏)

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

答案 5 :(得分:1)

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

Image of how it looks on edges