Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用opencv进行立体图像校正不起作用_Opencv_Computer Vision - Fatal编程技术网

使用opencv进行立体图像校正不起作用

使用opencv进行立体图像校正不起作用,opencv,computer-vision,Opencv,Computer Vision,我正在尝试使用cv2对两个立体图像进行校正。在找到两个摄像机(K1、D1、K2、D2、R、T)的摄像机矩阵后,我进行了立体校正。在那之后,我得到了R1,R2,P1,P2,Q,roi1,roi2,并在cv2.initundistortrectiveymap中使用这些参数来得到左校正图像和右校正图像。 但用这种方法校正后的图像效果不好。我使用alpha=-1。 这是我的密码: R1, R2, P1, P2, Q, roi1, roi2 = cv2.stereoRectify(cal_data.cam

我正在尝试使用cv2对两个立体图像进行校正。在找到两个摄像机(K1、D1、K2、D2、R、T)的摄像机矩阵后,我进行了立体校正。在那之后,我得到了R1,R2,P1,P2,Q,roi1,roi2,并在cv2.initundistortrectiveymap中使用这些参数来得到左校正图像和右校正图像。 但用这种方法校正后的图像效果不好。我使用alpha=-1。 这是我的密码:

R1, R2, P1, P2, Q, roi1, roi2 = cv2.stereoRectify(cal_data.camera_model.get('M1'), cal_data.camera_model.get('dist1'), cal_data.camera_model.get('M2'), cal_data.camera_model.get('dist2'),
                                                  (960, 544), cal_data.camera_model.get('R'), cal_data.camera_model.get('T'), alpha=-1)

print(R1, R2, P1, P2)

leftFrame = cv2.imread('/home/nikhil_m/Pictures/Webcam/2019-07-29-171837.jpg')
rightFrame = cv2.imread('/home/nikhil_m/Pictures/Webcam/2019-07-29-171809.jpg')

leftFrame =  cv2.resize(leftFrame,(960,544))
rightFrame = cv2.resize(rightFrame, (960, 544))

leftMapX, leftMapY = cv2.initUndistortRectifyMap(cal_data.camera_model.get('M1'), cal_data.camera_model.get('dist1'), R1, P1, (960,544), cv2.CV_32FC1)
left_rectified = cv2.remap(leftFrame, leftMapX, leftMapY, cv2.INTER_LINEAR, cv2.BORDER_CONSTANT)
rightMapX, rightMapY = cv2.initUndistortRectifyMap(cal_data.camera_model.get('M2'), cal_data.camera_model.get('dist2'), R2, P2, (960,544), cv2.CV_32FC1)
right_rectified = cv2.remap(rightFrame, rightMapX, rightMapY, cv2.INTER_LINEAR, cv2.BORDER_CONSTANT)
有没有更好的方法来矫正图像,或者我做错了什么。请帮忙

编辑:校准图像。

原始图像:

摄像机矩阵:

intrinsive_mtx_1[[1.22248627e+03 0.00000000 E+00 5.24929333e+02]
[0.00000000e+0013260348E+034.99669610e+01]
[0.00000000e+000.00000000e+00100000000E+00]]
第一区[[0.098504681.08533383-0.10682535 0.01777223-3.39061053]]
固有mtx_2[[1.07148978e+03 0.00000000 E+00 4.21476300e+02]
[0.00000000e+00109912897E+032.61293969e+02]
[0.00000000e+000.00000000e+00100000000E+00]]
第2区[[-0.15751877-0.12428592-0.01325468 0.02449842 3.72130512]]
R[[0.89624385-0.12740274-0.42487116]
[ 0.14523621  0.98934946  0.00969995]
[ 0.41911026 -0.0704002   0.90520186]]
T[[16.81657383]
[-5.69906211]
[ 2.42601652]]
E[[-2.74088083-1.99896304-5.18233385]
[ -4.87369619   0.87480896 -16.25313836]
[  7.55012482  15.91139212  -2.25824725]]
F[[1.77370674e-06 1.19257563e-06 3.10912454e-03]
[3.0746016E-06-5.08784373e-07 1.09461230e-02]
[-6.78615804e-03-1.05410214e-02 1.00000000 E+00]]

查看旋转矩阵
R
。如果你的相机是平行的,它应该接近身份矩阵。我用这个来检查相机之间的角度,结果显示角度是
[-4.44710871-24.77842715 9.20475808]
。因此,我假设你的相机不是平行的,这就是为什么你的方法不起作用。请参阅我的答案,了解如何在您的情况下进行适当的立体声校正

请发布您的源图像和已删除的图像。你的相机是parralel吗?@PiotrSiekański大部分是Parrell请同时提供M1、M2、dist1、dist2、R、T以复制你的结果。@PiotrSiekański请在我的编辑问题中查看这些参数。