我使用OpenCV来消除图像侵权。该代码在Windows机器上运行良好(Win 10,Conda环境opencv 3.4版(,但在树莓派4b(opencv 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. ]]
因为旧版本OpenCV中有一个关于getOptimalNewCameraMatrix()
的错误,并且在版本3.4.9和4.2.0中进行了修复(它们都在2019.12发布(
也就是说,如果您使用的是3.4.9之前的OpenCV3或4.2.0之前的OpenCV 4,函数getOptimalNewCameraMatrix()
可能会得到错误的结果。这与平台无关。
供参考:
- #15953:立体声校正(cvStereoRectify(、initCameraMatrix2D(cvInitIntrinsicParams2D(、getOptimalNewCameraMatrix(cvGetOptimalNewCameraMatrix(中的错误
- #16024:calib3d:revert stereoRectify((从PR更改:6836、6972、6955