Whats the problem with my script?

im trying to use cv2.StereoSGBMcreate to make depthmap

this is my code

import numpy as np

from sklearn.preprocessing import normalize

import cv2

 

print('loading images...')

imgL = cv2.imread('imgl.jpg')  # downscale images for faster processing

imgR = cv2.imread('imgr.jpg')

 

# SGBM Parameters -----------------

window_size = 3                     # wsize default 3; 5; 7 for SGBM reduced size image; 15 for SGBM full size image (1300px and above); 5 Works nicely

 

left_matcher = cv2.StereoSGBM_create(

    minDisparity=0,

    numDisparities=160,             # max_disp has to be dividable by 16 f. E. HH 192, 256

    blockSize=5,

    P1=8 * 3 * window_size ** 2,    # wsize default 3; 5; 7 for SGBM reduced size image; 15 for SGBM full size image (1300px and above); 5 Works nicely

    P2=32 * 3 * window_size ** 2,

    disp12MaxDiff=1,

    uniquenessRatio=15,

    speckleWindowSize=0,

    speckleRange=2,

    preFilterCap=63,

    mode=cv2.STEREO_SGBM_MODE_SGBM_3WAY

)

 

right_matcher = cv2.ximgproc.createRightMatcher(left_matcher)

 

# FILTER Parameters

lmbda = 80000

sigma = 1.2

visual_multiplier = 1.0

 

wls_filter = cv2.ximgproc.createDisparityWLSFilter(matcher_left=left_matcher)

wls_filter.setLambda(lmbda)

wls_filter.setSigmaColor(sigma)

 

print('computing disparity...')

displ = left_matcher.compute(imgL, imgR)  # .astype(np.float32)/16

dispr = right_matcher.compute(imgR, imgL)  # .astype(np.float32)/16

displ = np.int16(displ)

dispr = np.int16(dispr)

filteredImg = wls_filter.filter(displ, imgL, None, dispr)  # important to put "imgL" here!!!

 

filteredImg = cv2.normalize(src=filteredImg, dst=filteredImg, beta=0, alpha=255, norm_type=cv2.NORM_MINMAX);

filteredImg = np.uint8(filteredImg)

cv2.imshow('Disparity Map', filteredImg)

cv2.waitKey()

cv2.destroyAllWindows()

and this is my result

plz can anyone hlep?

it may not be a problem with the script. block matching can only handle the commonly visible region from both images, which is fairly small in your case (looking at your other question)

since you cannot reduce the baseline (distance between cams), given your hw, –
try with more distance to the object (you also have to (re)calibrate for that distance)

thx for reply i’ll try