sgbm算法的python
时间: 2025-01-15 18:16:52 浏览: 57
### 关于SGBM算法的Python实现
#### 创建立体匹配对象
`cv2.StereoSGBM_create()` 函数用于创建半全局块匹配 (Semi-Global Block Matching, SGBM) 的立体匹配类实例。此函数允许通过指定多个参数来配置立体匹配过程,其中 `minDisparity`, `numDisparities`, 和 `blockSize` 是最为重要的几个参数[^3]。
```python
import cv2
import numpy as np
stereo = cv2.StereoSGBM_create(
minDisparity=0,
numDisparities=16*8, # must be divisible by 16 and greater than zero
blockSize=9,
P1=8 * 3 * 3 ** 2,
P2=32 * 3 * 3 ** 2,
disp12MaxDiff=1,
uniquenessRatio=10,
speckleWindowSize=100,
speckleRange=32
)
```
#### 加载并处理图像对
为了执行双目测距,需要准备一对校准过的左右视图作为输入给上述创建的对象。通常情况下,这些图片应该已经过预处理阶段,比如矫正畸变等操作[^4]。
```python
imgL = cv2.imread('left_image.png', 0)
imgR = cv2.imread('right_image.png', 0)
disparity_map = stereo.compute(imgL, imgR).astype(np.float32) / 16.0
```
#### 显示结果
最后一步是展示生成的距离图(即差异图),这可以通过 OpenCV 提供的功能轻松完成。此外还可以进一步转换成彩色版本以便更好地可视化效果[^5]。
```python
def convert_disparity_to_pseudocolor(disparity):
disparity_normalized = ((disparity - disparity.min()) *
(1/(disparity.max() - disparity.min()) * 255)).astype('uint8')
return cv2.applyColorMap(disparity_normalized, cv2.COLORMAP_JET)
disp_color = convert_disparity_to_pseudocolor(disparity_map)
cv2.imshow("Depth Map", disp_color)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文
相关推荐
















