Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

How to apply `DisparityWLSFilter` to live stereo camera data using precomputed disparity map in OpenCV-Python

Ask Question

I am trying to post-filter my stereo cameras using cv2.ximgproc.createDisparityWLSFilter after block matching and rectification.

I have been following this tutorial and have implemented the suggestions in this answer and this answer in my code (snippet, below). However, I already have an instance of cv2.StereoBM_create , performed rectification, and computed the disparity.

    stereo = cv2.StereoBM_create()
    wls_filter = cv2.ximgproc.createDisparityWLSFilter(stereo)
    disparity = stereo.compute(Left_rect, Right_rect)
    disparity = disparity.astype(np.float32)
    # Scaling down the disparity values and normalizing them
    disparity = (disparity / 16.0 - minDisparity) / numDisparities
    # Normalize and apply a color map
    disparityImg = cv2.normalize(src=disparity, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX,
                                 dtype=cv2.CV_8UC1)
    disparityImg = cv2.applyColorMap(disparityImg, cv2.COLORMAP_JET)
    # Applying WLS filter to remove noise
    left_image = Left_rect
    right_image = Right_rect
    left_matcher = stereo
    right_matcher = cv2.ximgproc.createRightMatcher(left_matcher)
    left_disp = left_matcher.compute(left_image, right_image)
    right_disp = right_matcher.compute(right_image, left_image)
    # Now create DisparityWLSFilter
    wls_filter = cv2.ximgproc.createDisparityWLSFilter(left_matcher)
    filtered_disp = wls_filter.filter(left_disp, left_image, disparity_map_right=right_disp)
    # Displaying the disparity map
    cv2.imshow("disparity map", disparityImg)
    cv2.imshow("filtered disparity map", filtered_disp)

The parameters for the stereoBM and wls filter are set using a GUI (see image below).

The above tutorial/code is written for two static left and right images. However, I need to apply it stereo webcams, as applied in this project.

When I run the code above, I get a blank disparity map image. Without the WLSFilter code the disparity map image shows is displayed.

I have tried feeding it my disparity map with left_matcher = disparity, but that obviously doesn't work as I need the left/right disparities separate.

I'm sure this is an easy fix/silly mistake I'm making, I just can't see it! Can anyone spot where I'm going wrong, please?

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.