cv2 立体匹配算法

本篇博客主要介绍cv2中立体匹配算法。

cv2.StereoBM_create(numDisparities=None, blockSize=None)

当采取两个同一水平线上的摄像头进行拍摄的时候,同一物体将在两个摄像机内被拍摄到,在两个摄像机内部,这个物体相对于摄像机中心点位置有不同的坐标。Xleft是该物体在左摄像机内相对位置,Xright是该物体在右摄像机内相对位置。两个摄像机相距S,焦距为f,物体P距离摄像机z,z也就是景深。当我们将两幅图像重叠在一起的时候,左摄像机上P的投影和右摄像机上P的投影位置有一个距离|Xleft|+|Xright|,这个距离称为Disparity,根据相似三角形图3可以得到z=sf/d. 也就是只要计算得到了d的值,就可以计算得到深度图。而在计算d的值的过程中需要对两幅图像进行匹配,寻找到物体P在两幅图像中的相对位置。在对图像进行匹配的过程中,需要用到cost computation,即通过寻找同一水平线上两幅图像上的点的最小误差来确定这两个点是否是同一个物体所成的像。由于一个点所能提供的信息太少,因此往往需要扩大对比的范围。

Xleft(tsukuba_l.png)

cv2 立体匹配算法_第1张图片

Xright(tsukuba_r.png)

cv2 立体匹配算法_第2张图片

下面是示例代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 左边摄像头拍到的图
imgL = cv2.imread('tsukuba_l.png', 0)
# 右边摄像头拍到的图
imgR = cv2.imread('tsukuba_r.png', 0)

# 立体匹配算法
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)

disparity = stereo.compute(imgL, imgR)
plt.imshow(disparity, 'gray')
plt.show()

 

运行结果:

cv2 立体匹配算法_第3张图片

欢迎关注我的公众号:

编程技术与生活(ID:hw_cchang)

 

你可能感兴趣的:(Python,Opencv,OpenCV-Python,立体匹配算法,cv2,OpenCV,python)