立体声网络摄像头深度检测

时间:2018-07-30 09:49:19

标签: python computer-vision opencv3.0 stereo-3d disparity-mapping

我是计算机视觉的新手。 我正在尝试从立体声网络摄像头计算深度。 我执行了以下步骤:

  • 摄像机校准:分别校准每个摄像机,得到Rms 0.2和0.18,然后使用openCv3校准两个摄像机(Rms:0.8)。
  • 使用ximgproc和opencv3计算视差图(先创建右匹配器,然后创建左匹配器,然后创建DisparityWLSFilter)
  • 检测并反对(使用颜色)
  • 使用以下公式:depth = base_line * focal_length / disparity获取深度 我得到了奇怪的值,我什至尝试使用cv2.reprojectImageTo3D,但它也遇到了同样的问题。

我没有固定值。球越远,深度越小。 我不理解3D重构给出的(x,y,z)
这是我的代码。 请帮助

代码

while(True):     如果不是(left.grab()和right.grab()):         打印(“没有更多帧”)         打破     _,leftFrame = left.retrieve()     _,rightFrame = right.retrieve()     leftFrame = cv2.remap(leftFrame,leftMapX,leftMapY,cv2.INTER_LINEAR)     rightFrame =     cv2.remap(rightFrame,rightMapX,rightMapY,cv2.INTER_LINEAR)

displ = left_matcher.compute(rightFrame,leftFrame).astype(np.float32)/16
dispr = right_matcher.compute(leftFrame ,rightFrame ).astype(np.float32)/16
displ = np.int16(displ)
dispr = np.int16(dispr)
filteredImg=None
filteredImg = wls_filter.filter(displ, rightFrame, None, dispr)  # important to put "imgL" here!!!
filteredImg = cv2.normalize(src=filteredImg, dst=filteredImg, beta=0, alpha=255, norm_type=cv2.NORM_MINMAX);
filteredImg = np.uint8(filteredImg)
cv2.imshow('disparity', filteredImg)

center=bd.ball_detection(rightFrame)

points_3D = cv2.reprojectImageTo3D(filteredImg, Q)
if center!= None:
    x= points_3D[center][0]
    y= points_3D[center][1]
    z= points_3D[center][2]
    print("1",triangulation_constant/filteredImg[center])
    print("2",x,y,z)

0 个答案:

没有答案