【问题标题】:OpenCV "getOptimalNewCameraMatrix" behaving differently on Linux/ARM and WindowsOpenCV“getOptimalNewCameraMatrix”在 Linux/ARM 和 Windows 上的行为不同
【发布时间】:2021-04-11 01:53:59
【问题描述】:

我正在使用 OpenCV 来消除图像失真。该代码在 Windows 机器(Win 10,Conda 环境 opencv-version 3.4)上运行良好,但在 Raspberry Pi 4b(opencv-version 4.3.0.38)上生成 0x0px 图像。原因似乎是,getOptimalNewCameraMatrix 在 Pi 上返回不同的 Matrix 和 Roi

就我而言,根据操作系统/架构的不同,相同的输入不应该有不同的输出。我有点迷茫,感谢任何类型的输入!

(有点)MWE:

import numpy as np
import cv2

#Image Dimensions
w=1024
h=768

#Parameters for undistortion
dist=np.array([[-2.85565904e-01, 1.12953316e-01, -1.99828374e-05, 1.23181460e-03, -2.40348722e-02]])
mtx =np.array([[500.94118521, 0., 557.7440342],[0., 500.13379004, 378.9970866],[0., 0., 1.]])
        
newcameramtx, roi=cv2.getOptimalNewCameraMatrix(mtx,dist,(w,h),1,(w,h))

print(newcameramtx)

Windows 10 Conda 环境下的输出(产生有用的不失真)

[[354.12069702   0.         534.00911997]
 [  0.         323.64080811 370.0690567 ]
 [  0.           0.           1.        ]]

在树莓派 4 B 上输出

[[ 25.96581841   0.         988.14487751]
 [  0.          31.46662331  35.98070241]
 [  0.           0.           1.        ]]

【问题讨论】:

  • 当我在 Windows 上运行您的代码时,我始终获得与您在使用 OpenCV 3.1、3.2、3.3、3.4.3、4.0 和 4.1 的 RPi(中间为 31.4)上获得相同的输出.然后在同一个平台上,我得到了 OpenCV 4.2、4.3、4.4 和 4.5 在 windows 上的输出(中间是 323.6)。因此,这里看起来不像是平台差异,而是在 4.1 和 4.2 之间的实现中发生了变化。我不明白的是,在你这边,情况正好相反,因为你声称第一个来自 3.4,第二个来自 4.3——奇怪......也许你的帖子有误?
  • @Micka 我认为这是在第二句话中。但由于某种原因,我得到了相反的行为,见上文......

标签: python opencv


【解决方案1】:

因为旧版本 OpenCV 中存在一个关于 getOptimalNewCameraMatrix() 的 bug,并且在版本 3.4.94.2.0 中已修复(它们都是2019.12 发布)。

也就是说,如果您使用的是 3.4.9 之前的 OpenCV3 或 4.2.0 之前的 OpenCV4,函数getOptimalNewCameraMatrix() 可能会得到错误的结果。这与平台无关。

供参考:

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 2013-11-21
    • 2021-04-26
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    相关资源
    最近更新 更多