我可以用cv2.StereoSGBM
计算一个深度贴图,看起来很不错。现在我想应用WLS过滤,如here所述
This答案中有一些信息,我将在下面介绍,但我不能完全投入工作
如何在Python中使用ximgproc_DisparityWLSFilter
?我知道理论和如何在C++中完成它,但是找不到任何函数来包装Python中的函数。(使用OpenCV 4.2.0)This是GitHub上的源代码,但它也不包含Python绑定
做:
wls = cv2.ximgproc_DisparityWLSFilter.filter(disparity_SGBM, imgL)
给出:
Traceback (most recent call last):
File ".\stereo_SGBM_filtering.py", line 158, in <module>
wls = cv2.ximgproc_DisparityWLSFilter.filter(disparity_SGBM, imgL)
TypeError: descriptor 'filter' requires a 'cv2.ximgproc_DisparityFilter' object but received a 'numpy.ndarray'
所以我知道我至少可以访问这些函数
如下所示:
wls = cv2.ximgproc_DisparityWLSFilter(stereoSGBM)
filtered_disparity_map = wls.filter(disparity_SGBM, imgL)
没有给出任何错误,但也没有给我一个图像
详情如下:
原始图像(Tsukuba
来自 Middlebury data set)
我的深度贴图如下所示:
import cv2
imgL = cv2.imread("tsukuba_l.png", cv2.IMREAD_GRAYSCALE) # left image
...
win_size = 2
min_disp = -4
max_disp = 9
num_disp = max_disp - min_disp # Needs to be divisible by 16
stereoSGBM = cv2.StereoSGBM_create(
minDisparity=min_disp,
numDisparities=num_disp,
blockSize=5,
uniquenessRatio=5,
speckleWindowSize=5,
speckleRange=5,
disp12MaxDiff=2,
P1=8 * 3 * win_size ** 2,
P2=32 * 3 * win_size ** 2,
)
disparity_SGBM = stereoSGBM.compute(imgL_undistorted, imgR_undistorted)
wls = cv2.ximgproc_DisparityWLSFilter(stereoSGBM)
filtered_disparity_map = wls.filter(disparity_SGBM, imgL)
您需要使用createDisparityWLSFilter工厂方法来获取DisparityWLSFilter的实例并使用它
例如:
相关问题 更多 >
编程相关推荐