Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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
Python 从视差图中检索三维坐标_Python_Opencv - Fatal编程技术网

Python 从视差图中检索三维坐标

Python 从视差图中检索三维坐标,python,opencv,Python,Opencv,我正在尝试从视差图中检索三维坐标。我获得了一系列的分数,但我不确定这些分数是否可信。我使用了OpenCV中的常用命令,如下所示。立体相机的固有参数已由一个单独的工具处理,该工具还可对输入图像进行校正 import numpy as np import cv2 from matplotlib import pyplot as plt imgL = cv2.imread('C:/Internship/left010.flt.pgm',0) imgR = cv2.imread('C:/Internsh

我正在尝试从视差图中检索三维坐标。我获得了一系列的分数,但我不确定这些分数是否可信。我使用了OpenCV中的常用命令,如下所示。立体相机的固有参数已由一个单独的工具处理,该工具还可对输入图像进行校正

import numpy as np
import cv2
from matplotlib import pyplot as plt
imgL = cv2.imread('C:/Internship/left010.flt.pgm',0)
imgR = cv2.imread('C:/Internship/right010.flt.pgm',0)
 #Calculate disparity
stereo = cv2.StereoSGBM(minDisparity = 0, numDisparities = 160, SADWindowSize =    11, disp12MaxDiff = 1, uniquenessRatio = 20, speckleWindowSize = 100, speckleRange = 2) 
disparity = stereo.compute(imgL,imgR)/16
 #Calculate Q matrix
cx = 630.0493
cy = 472.6702
fx = 1887.663
fy = 1880.201
cameraMatrix1 = np.mat([[fx, 0, 0],[0, fy, 0],[cx, cy, 1]])
cameraMatrix2 = np.mat([[fx, 0, 0],[0, fy, 0],[cx, cy, 1]])
distCoeffs1 = np.array([0,0,0,0,0])
distCoeffs2 = np.array([0,0,0,0,0])
R = np.mat([[0.9743, 0.0335, -0.2227],[-0.0379, 0.9991, -0.0155], [0.2220, 0.0236, 0.9747]])#Rotation Matrix
T = np.array([ 0.2042, -0.0019, 0.0313]) #Translation Vector
R1 = np.mat(np.empty((3,3)))
R2 = np.float32(np.empty((3,3)))
P1 = np.float32(np.empty((3,4)))
P2 = np.float32(np.empty((3,4)))
Q = np.float32(np.empty((4,4)))
cv2.stereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, (w,h), R, T, R1, R2, P1, P2, Q, cv2.CALIB_ZERO_DISPARITY, -1, (0,0))
 #Calculate3Dpoints
points = cv2.reprojectImageTo3D(disparity, Q)
这些图像可以在这里查看

我之所以怀疑,是因为我在“积分”矩阵中有负值。例如,Z值的范围为[-388.438,-194.219,…-2.443388.438,inf]。我不确定这是否是因为视差图中的缺陷像素。 我尝试通过使用x和y坐标创建遮罩来切割原始图像的一部分,它确实给了我一些输出,请看下面:

z = points[:,:,2]
val, count = np.unique(z, return_counts = True)
rec = np.logical_and(z>-300,  z< -5)
mask = np.invert(rec)
imgL[mask] = 0
plt.imshow(imgL,'gray')
plt.show()
z=点[:,:,2]
val,count=np.unique(z,return_counts=True)
rec=np.逻辑_和(z>-300,z<-5)
掩码=np.反转(rec)
imgL[mask]=0
plt.imshow(imgL,“灰色”)
plt.show()
输出图像是我假设,如果任何图像在某个随机点被索引,那么将有一些输出图像。所以基本上,我想检查3D点的有效性,我不知道怎么做。请帮我核实一下。如果需要进一步的信息,请告诉我