Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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

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和Python的立体校正问题 进口cv2 导入glob 导入argparse 输入数学 从numpy导入genfromtxt 将matplotlib.pyplot作为plt导入 将numpy作为np导入 导入操作系统路径 从scipy导入ndimage 导入操作系统 左=cv2.imread('D:/input image 1.jpg',cv2.imread\u未更改) right=cv2.imread('D:/input image 2.jpg',cv2.imread\u未更改) #left=(left/256).astype('uint8') #right=(right/256).astype('uint8') CameraTrix1=np.数组([1485.8503101355045,0641.0072474534551],[01486.8249802291273454.1981417235667],[0,0,1]) CameraMatrix=np.数组([[1472.34425902698,0656.7358738783742],[01473.18447579598841.016803589085],[0,0,1]) distCoeffs1=np.数组([-0.0923621703670154,0.1580100956677457,0.002067941868083445,--0.0023435708660260184,0.04491629603683055]) distCoeffs2=np.数组([-0.09949068652688753,0.22953391558591676,0.001674999511326907,-0.001594093770328348,-0.13603886268508916]) 旋转矩阵=np.数组([0.9999169807005986,0.0026862926847088424,-0.012602203704541104],-0.002633967055223802,0.9999878496600472,0.004166863307911919935],[0.012613243997904163,-0.004133323588458492,0.999119069757908]) transVector=np.数组([29.96389633009774,0.5883268401189343,-5.0370190999346365]) 基本矩阵=np.数组([-0.005846632380824811,5.0345261532342365,0.6092635826971343],-5.4145428656773165,0.11031957194242471,-29.897779179091888],-0.6672019134164675,29.96195184048419,0.132269648639909]) fundMatrix=np.数组([4.567507458136527e-08,-3.930495370357416e-05,0.010750771532659317],[4.2275378783312907E-05,-8.607826196991683e-07,0.3201405456504413],-0.010999824926761303,-0.318213833959486,1]) 标志=cv2.CALIB\u零\u差异 图像大小=左。形状[:-1] R1、R2、P1、P2、Q、roi1、roi2=cv2。立体校正(CameraTrix1、distCoeffs1、CameraTrix2、distCoeffs2、图像大小、旋转矩阵、转向量、标志=标志) leftmapX,leftmapY=cv2.InitUndistortRectiveyMap(CameraTrix1,distCoeffs1,R1,P1,图像大小,cv2.CV_32FC1) rightmapX,rightmapY=cv2.InitUndistortRectiveyMap(CameraMatrix X2,distCoeffs2,R2,P2,图像大小,cv2.CV_32FC1) left_remap=cv2.remap(left,leftmapX,leftmapY,cv2.INTER_LANCZOS4) right_remap=cv2.remap(right、leftmapX、righmapy、cv2.INTER_LANCZOS4) #由于某些原因,图像在重新映射后会颠倒,我必须将它们反转回来 left_remap=nImage.rotate(left_remap,180) 右重映射=nImage.rotate(右重映射,180) 对于范围内的线(0,int(右映射形状[0]/20)): 左重新映射[行*20,:]=0 右重新映射[第20行:]=0 cv2.namedWindow(“输出图像”,cv2.WINDOW\u正常) cv2.imshow('output images',np.hstack([left\u remap,right\u remap])) cv2.等待键(0) cv2.destroyAllWindows()_Python_Opencv_Camera Calibration_Stereo 3d_Multiview - Fatal编程技术网

OpenCV和Python的立体校正问题 进口cv2 导入glob 导入argparse 输入数学 从numpy导入genfromtxt 将matplotlib.pyplot作为plt导入 将numpy作为np导入 导入操作系统路径 从scipy导入ndimage 导入操作系统 左=cv2.imread('D:/input image 1.jpg',cv2.imread\u未更改) right=cv2.imread('D:/input image 2.jpg',cv2.imread\u未更改) #left=(left/256).astype('uint8') #right=(right/256).astype('uint8') CameraTrix1=np.数组([1485.8503101355045,0641.0072474534551],[01486.8249802291273454.1981417235667],[0,0,1]) CameraMatrix=np.数组([[1472.34425902698,0656.7358738783742],[01473.18447579598841.016803589085],[0,0,1]) distCoeffs1=np.数组([-0.0923621703670154,0.1580100956677457,0.002067941868083445,--0.0023435708660260184,0.04491629603683055]) distCoeffs2=np.数组([-0.09949068652688753,0.22953391558591676,0.001674999511326907,-0.001594093770328348,-0.13603886268508916]) 旋转矩阵=np.数组([0.9999169807005986,0.0026862926847088424,-0.012602203704541104],-0.002633967055223802,0.9999878496600472,0.004166863307911919935],[0.012613243997904163,-0.004133323588458492,0.999119069757908]) transVector=np.数组([29.96389633009774,0.5883268401189343,-5.0370190999346365]) 基本矩阵=np.数组([-0.005846632380824811,5.0345261532342365,0.6092635826971343],-5.4145428656773165,0.11031957194242471,-29.897779179091888],-0.6672019134164675,29.96195184048419,0.132269648639909]) fundMatrix=np.数组([4.567507458136527e-08,-3.930495370357416e-05,0.010750771532659317],[4.2275378783312907E-05,-8.607826196991683e-07,0.3201405456504413],-0.010999824926761303,-0.318213833959486,1]) 标志=cv2.CALIB\u零\u差异 图像大小=左。形状[:-1] R1、R2、P1、P2、Q、roi1、roi2=cv2。立体校正(CameraTrix1、distCoeffs1、CameraTrix2、distCoeffs2、图像大小、旋转矩阵、转向量、标志=标志) leftmapX,leftmapY=cv2.InitUndistortRectiveyMap(CameraTrix1,distCoeffs1,R1,P1,图像大小,cv2.CV_32FC1) rightmapX,rightmapY=cv2.InitUndistortRectiveyMap(CameraMatrix X2,distCoeffs2,R2,P2,图像大小,cv2.CV_32FC1) left_remap=cv2.remap(left,leftmapX,leftmapY,cv2.INTER_LANCZOS4) right_remap=cv2.remap(right、leftmapX、righmapy、cv2.INTER_LANCZOS4) #由于某些原因,图像在重新映射后会颠倒,我必须将它们反转回来 left_remap=nImage.rotate(left_remap,180) 右重映射=nImage.rotate(右重映射,180) 对于范围内的线(0,int(右映射形状[0]/20)): 左重新映射[行*20,:]=0 右重新映射[第20行:]=0 cv2.namedWindow(“输出图像”,cv2.WINDOW\u正常) cv2.imshow('output images',np.hstack([left\u remap,right\u remap])) cv2.等待键(0) cv2.destroyAllWindows()

OpenCV和Python的立体校正问题 进口cv2 导入glob 导入argparse 输入数学 从numpy导入genfromtxt 将matplotlib.pyplot作为plt导入 将numpy作为np导入 导入操作系统路径 从scipy导入ndimage 导入操作系统 左=cv2.imread('D:/input image 1.jpg',cv2.imread\u未更改) right=cv2.imread('D:/input image 2.jpg',cv2.imread\u未更改) #left=(left/256).astype('uint8') #right=(right/256).astype('uint8') CameraTrix1=np.数组([1485.8503101355045,0641.0072474534551],[01486.8249802291273454.1981417235667],[0,0,1]) CameraMatrix=np.数组([[1472.34425902698,0656.7358738783742],[01473.18447579598841.016803589085],[0,0,1]) distCoeffs1=np.数组([-0.0923621703670154,0.1580100956677457,0.002067941868083445,--0.0023435708660260184,0.04491629603683055]) distCoeffs2=np.数组([-0.09949068652688753,0.22953391558591676,0.001674999511326907,-0.001594093770328348,-0.13603886268508916]) 旋转矩阵=np.数组([0.9999169807005986,0.0026862926847088424,-0.012602203704541104],-0.002633967055223802,0.9999878496600472,0.004166863307911919935],[0.012613243997904163,-0.004133323588458492,0.999119069757908]) transVector=np.数组([29.96389633009774,0.5883268401189343,-5.0370190999346365]) 基本矩阵=np.数组([-0.005846632380824811,5.0345261532342365,0.6092635826971343],-5.4145428656773165,0.11031957194242471,-29.897779179091888],-0.6672019134164675,29.96195184048419,0.132269648639909]) fundMatrix=np.数组([4.567507458136527e-08,-3.930495370357416e-05,0.010750771532659317],[4.2275378783312907E-05,-8.607826196991683e-07,0.3201405456504413],-0.010999824926761303,-0.318213833959486,1]) 标志=cv2.CALIB\u零\u差异 图像大小=左。形状[:-1] R1、R2、P1、P2、Q、roi1、roi2=cv2。立体校正(CameraTrix1、distCoeffs1、CameraTrix2、distCoeffs2、图像大小、旋转矩阵、转向量、标志=标志) leftmapX,leftmapY=cv2.InitUndistortRectiveyMap(CameraTrix1,distCoeffs1,R1,P1,图像大小,cv2.CV_32FC1) rightmapX,rightmapY=cv2.InitUndistortRectiveyMap(CameraMatrix X2,distCoeffs2,R2,P2,图像大小,cv2.CV_32FC1) left_remap=cv2.remap(left,leftmapX,leftmapY,cv2.INTER_LANCZOS4) right_remap=cv2.remap(right、leftmapX、righmapy、cv2.INTER_LANCZOS4) #由于某些原因,图像在重新映射后会颠倒,我必须将它们反转回来 left_remap=nImage.rotate(left_remap,180) 右重映射=nImage.rotate(右重映射,180) 对于范围内的线(0,int(右映射形状[0]/20)): 左重新映射[行*20,:]=0 右重新映射[第20行:]=0 cv2.namedWindow(“输出图像”,cv2.WINDOW\u正常) cv2.imshow('output images',np.hstack([left\u remap,right\u remap])) cv2.等待键(0) cv2.destroyAllWindows(),python,opencv,camera-calibration,stereo-3d,multiview,Python,Opencv,Camera Calibration,Stereo 3d,Multiview,我正在对水平方向和垂直方向上的5个不同镜头进行校正(即,我需要所有公共点在所有5个镜头的图像中完全相同的位置)。当我用两个透镜测试立体背诵时,我的两个透镜水平放置得比垂直放置得远,cv2.StereoRective总是将它们解释为垂直分开。我希望能够告诉函数水平解释它。我在这里看到过一些类似的问题,但在任何地方都找不到有用的答案 编辑:为了便于复制,我在代码中添加了所有失真系数和校准矩阵。这些值是通过使用大量校准图像和函数cv2.stereoCalibrate获得的,但无法上传所有这些图像和系数

我正在对水平方向和垂直方向上的5个不同镜头进行校正(即,我需要所有公共点在所有5个镜头的图像中完全相同的位置)。当我用两个透镜测试立体背诵时,我的两个透镜水平放置得比垂直放置得远,cv2.StereoRective总是将它们解释为垂直分开。我希望能够告诉函数水平解释它。我在这里看到过一些类似的问题,但在任何地方都找不到有用的答案

编辑:为了便于复制,我在代码中添加了所有失真系数和校准矩阵。这些值是通过使用大量校准图像和函数cv2.stereoCalibrate获得的,但无法上传所有这些图像和系数提取代码


我猜您的校准代码有一些错误。下面是我在上面代码中发现的一些错误:
right\u remap=cv2.remap(right,rightmap x,rightmap y,cv2.INTER\u LANCZOS4)
对于未知的输出反转,需要翻转旋转和平移向量:
cv2(CameraMatrix X1,distCoeffs1,CameraMatrix X2,distCoeffs2,图像大小,旋转矩阵.T,-转换向量,标志=标志)
如果数据集是开源的,你可以在这里提供链接。@SriRaghuMalireddi当我意识到校准和校正算法按一定的左右顺序工作时,输出旋转问题得到了解决,我必须相应地提供左右图像。至于数据集,因为它们只是平方检查棋盘图像,我会尽快上传。左右图像顺序解释了{R,T}反转为什么有效。@SriRaghuMalireddi随着我对立体矫正的深入研究,我现在想知道立体矫正功能是否真的将它们对准了有更多差异的方向(这意味着如果我的整个问题都是合法的吗?)。因为我发现立体校正过程实际上为视差图提供了输入(这意味着立体校正过程后重新映射的图像不会完全或几乎完全交叉匹配).这是否正确?立体校正使用来自两台摄像机的信息(在校准过程中获得)将图像投影到单个视图平面中。这意味着两个图像应该在任何可能的方向上对齐,就像它们缝合在一起一样。因此,OpenCV的立体校正也应该这样做。立体校正可能无法正常工作的唯一原因是代码或calibra中存在错误这个阶段是错误的。