【发布时间】: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 我认为这是在第二句话中。但由于某种原因,我得到了相反的行为,见上文......