请使用python-opencv,使用SGBM算法得到物体的视差图
时间: 2024-02-01 11:16:15 浏览: 114
好的,以下是使用Python OpenCV库中的SGBM算法获取物体视差图的示例代码:
```python
import numpy as np
import cv2
# 读取左右两张图片
img_left = cv2.imread('left_img.jpg')
img_right = cv2.imread('right_img.jpg')
# 转换为灰度图像
gray_left = cv2.cvtColor(img_left, cv2.COLOR_BGR2GRAY)
gray_right = cv2.cvtColor(img_right, cv2.COLOR_BGR2GRAY)
# SGBM算法参数设置
window_size = 3
min_disp = 0
num_disp = 16 * 3
stereo = cv2.StereoSGBM_create(
minDisparity=min_disp,
numDisparities=num_disp,
blockSize=window_size,
P1=8 * 3 * window_size ** 2,
P2=32 * 3 * window_size ** 2,
disp12MaxDiff=1,
uniquenessRatio=10,
speckleWindowSize=100,
speckleRange=32
)
# 计算视差图
disparity = stereo.compute(gray_left, gray_right)
# 可视化视差图
disparity_visual = cv2.normalize(disparity, None, 0, 255, cv2.NORM_MINMAX)
disparity_visual = np.uint8(disparity_visual)
cv2.imshow('Disparity', disparity_visual)
cv2.waitKey()
cv2.destroyAllWindows()
```
其中,`img_left`和`img_right`分别为左右两张图片,需要注意的是这两张图片应该是同一场景的不同视角拍摄的,且需要为灰度图像。
`window_size`指定了窗口大小,`min_disp`指定了最小视差值,`num_disp`指定了视差值的数量,这些参数需要根据实际情况进行设置。
最后,我们使用`cv2.normalize()`函数将视差图进行归一化,并将数据类型转换为`uint8`,然后在窗口中显示可视化的视差图。
阅读全文