建筑网站 知乎,做网页设计软件有哪些,农资销售网站建设方案,上海高端网站关于双目相机的矫正功能#xff0c;博主有c和python 的代码片。 python的比较简洁#xff0c;一目了然。 整理一下放在这里。 需要的人可以自取#xff0c;希望已经造好的轮子可以帮助大家节省开发时间#xff0c;去做更多的事情。 如果搬运代码到自己的博客#xff0c;希… 关于双目相机的矫正功能博主有c和python 的代码片。 python的比较简洁一目了然。 整理一下放在这里。 需要的人可以自取希望已经造好的轮子可以帮助大家节省开发时间去做更多的事情。 如果搬运代码到自己的博客希望注明出处https://editor.csdn.net/md?not_checkout1spm1001.2014.3001.9614articleId134178030 尊重作者的心血谢谢 点赞关注收藏 import cv2
import numpy as np
import scipy.io as sio
import os
import pandas as pd
import pdb
dirpic C:/Users/Administrator/Desktop/parameter/l/
dirpicR C:/Users/Administrator/Desktop/parameter/r/#读取文件夹中的所有图像依次做计算处理
pic_name os.listdir(dirpic)
pic_nameR os.listdir(dirpicR)
#以下六项是已知的相机的标定参数文件
load_R C:/Users/Administrator/Desktop/R.mat
load_T C:/Users/Administrator/Desktop/T.mat
load_Ml C:/Users/Administrator/Desktop/Ml.mat
load_Mr C:/Users/Administrator/Desktop/Mr.mat
load_Dl C:/Users/Administrator/Desktop/Dl.mat
load_Dr C:/Users/Administrator/Desktop/Dr.matR sio.loadmat(load_R)[R]
T sio.loadmat(load_T)[T]
left_camera_matrix sio.loadmat(load_Ml)[ML]
right_camera_matrix sio.loadmat(load_Mr)[MR]
left_distortion sio.loadmat(load_Dl)[DL]
right_distortion sio.loadmat(load_Dr)[DR]
frame cv2.imread(C:/Users/Administrator/Desktop/l/pic_name[0])
h, w frame.shape[:2]
size (w,h)
size1 (w,h)
#立体校正环节求矩阵
R1, R2, P1, P2, Q, validPixROI1, validPixROI2 cv2.stereoRectify(left_camera_matrix, left_distortion,right_camera_matrix, right_distortion, size, R,T,flagscv2.CALIB_ZERO_DISPARITY,alpha1)
#左右相机图像变换关系
left_map1, left_map2 cv2.initUndistortRectifyMap(left_camera_matrix, left_distortion, R1, P1, size1, 5)
right_map1, right_map2 cv2.initUndistortRectifyMap(right_camera_matrix, right_distortion, R2, P2, size1, 5)def stereocab(pic_namel,pic_namer,i):frame1 cv2.imread(C:/Users/Administrator/Desktop/parameter/photocab/l/pic_namel,0)frame2 cv2.imread(C:/Users/Administrator/Desktop/parameter/photocab/r/pic_namer,0) #根据变换关系与原图像求得校正后的目标图像img1_rectified cv2.remap(frame1, left_map1, left_map2, cv2.INTER_CUBIC)img2_rectified cv2.remap(frame2, right_map1, right_map2, cv2.INTER_CUBIC)cv2.imwrite(C:/Users/Administrator/Desktop/parameter/photocab/l/clstr(i).jpg,img1_rectified)cv2.imwrite(C:/Users/Administrator/Desktop/parameter/photocab/r/crstr(i).jpg,img2_rectified)for i in range(len(pic_name)):stereocab(pic_name[i],pic_nameR[i],i)
这里用到了比较关键的函数stereoRectify与initUndistortRectifyMap
极线矫正也就是把两幅图的极线搞成水平把任意位置的像平面搞成两个平行的像平面 双目相机的立体校正stereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, R, T[, R1[, R2[, P1[, P2[, Q[, flags[, alpha[, newImageSize]]]]]]]])- R1, R2, P1, P2, Q, validPixROI1, validPixROI2cameraMatrix1 第一个摄像机的摄像机矩阵即左相机相机内参矩阵矩阵第三行格式应该为 0 0 1distCoeffs1 第一个摄像机的畸变向量cameraMatrix2 第一个摄像机的摄像机矩阵即右相机相机内参矩阵矩阵第三行格式应该为 0 0 1distCoeffs2 第二个摄像机的畸变向量imageSize 图像大小R- 相机之间的旋转矩阵这里R的意义是相机1通过变换R到达相机2的位姿 划重点T- 左相机到右相机的平移矩阵R1 输出矩阵第一个摄像机的校正变换矩阵旋转变换R2 输出矩阵第二个摄像机的校正变换矩阵旋转矩阵P1 输出矩阵第一个摄像机在新坐标系下的投影矩阵P2 输出矩阵第二个摄像机在想坐标系下的投影矩阵Q 4*4的深度差异映射矩阵flags 可选的标志有两种零或者 CV_CALIB_ZERO_DISPARITY ,如果设置 CV_CALIB_ZERO_DISPARITY 的话该函数会让两幅校正后的图像的主点有相同的像素坐标。否则该函数会水平或垂直的移动图像以使得其有用的范围最大alpha 拉伸参数。如果设置为负或忽略将不进行拉伸。如果设置为0那么校正后图像只有有效的部分会被显示没有黑色的部分如果设置为1那么就会显示整个图像。设置为0~1之间的某个值其效果也居于两者之间。newImageSize 校正后的图像分辨率默认为原分辨率大小。validPixROI1 可选的输出参数Rect型数据。其内部的所有像素都有效validPixROI2 可选的输出参数Rect型数据。其内部的所有像素都有效Rl, Rr, Pl, Pr, Q, validPixROIl, validPixROIr cv2.stereoRectify(cameraModel[Ml], cameraModel[dl], cameraModel[Mr], cameraModel[dr], (w ,h), cameraModel[R], cameraModel[T])mapl_1, mapl_2 cv2.initUndistortRectifyMap(cameraModel[Ml], cameraModel[dl], Rl, Pl, (w,h), cv2.CV_32FC1)mapr_1, mapr_2 cv2.initUndistortRectifyMap(cameraModel[Mr], cameraModel[dr], Rr, Pr, (w,h), cv2.CV_32FC1)initUndistortRectifyMap计算计算未失真和校正变换映射cameraMatrix——输入的摄像头内参数矩阵3X3矩阵distCoeffs——输入的摄像头畸变系数矩阵5X1矩阵R——输入的第一和第二摄像头坐标系之间的旋转矩阵newCameraMatrix——输入的校正后的3X3摄像机矩阵size——摄像头采集的无失真图像尺寸m1type——map1的数据类型可以是CV_32FC1或CV_16SC2map1——输出的X坐标重映射参数map2——输出的Y坐标重映射参数看到这里了点赞关注收藏一下吧谢谢