Path: blob/master/Depth-Perception-Using-Stereo-Camera/python/disparity_params_gui.py
3142 views
import numpy as np1import cv2234# Check for left and right camera IDs5# These values can change depending on the system6CamL_id = 2 # Camera ID for left camera7CamR_id = 0 # Camera ID for right camera89CamL= cv2.VideoCapture(CamL_id)10CamR= cv2.VideoCapture(CamR_id)1112# Reading the mapping values for stereo image rectification13cv_file = cv2.FileStorage("../data/stereo_rectify_maps.xml", cv2.FILE_STORAGE_READ)14Left_Stereo_Map_x = cv_file.getNode("Left_Stereo_Map_x").mat()15Left_Stereo_Map_y = cv_file.getNode("Left_Stereo_Map_y").mat()16Right_Stereo_Map_x = cv_file.getNode("Right_Stereo_Map_x").mat()17Right_Stereo_Map_y = cv_file.getNode("Right_Stereo_Map_y").mat()18cv_file.release()1920def nothing(x):21pass2223cv2.namedWindow('disp',cv2.WINDOW_NORMAL)24cv2.resizeWindow('disp',600,600)2526cv2.createTrackbar('numDisparities','disp',1,17,nothing)27cv2.createTrackbar('blockSize','disp',5,50,nothing)28cv2.createTrackbar('preFilterType','disp',1,1,nothing)29cv2.createTrackbar('preFilterSize','disp',2,25,nothing)30cv2.createTrackbar('preFilterCap','disp',5,62,nothing)31cv2.createTrackbar('textureThreshold','disp',10,100,nothing)32cv2.createTrackbar('uniquenessRatio','disp',15,100,nothing)33cv2.createTrackbar('speckleRange','disp',0,100,nothing)34cv2.createTrackbar('speckleWindowSize','disp',3,25,nothing)35cv2.createTrackbar('disp12MaxDiff','disp',5,25,nothing)36cv2.createTrackbar('minDisparity','disp',5,25,nothing)3738# Creating an object of StereoBM algorithm39stereo = cv2.StereoBM_create()4041while True:4243# Capturing and storing left and right camera images44retL, imgL= CamL.read()45retR, imgR= CamR.read()4647# Proceed only if the frames have been captured48if retL and retR:49imgR_gray = cv2.cvtColor(imgR,cv2.COLOR_BGR2GRAY)50imgL_gray = cv2.cvtColor(imgL,cv2.COLOR_BGR2GRAY)5152# Applying stereo image rectification on the left image53Left_nice= cv2.remap(imgL_gray,54Left_Stereo_Map_x,55Left_Stereo_Map_y,56cv2.INTER_LANCZOS4,57cv2.BORDER_CONSTANT,580)5960# Applying stereo image rectification on the right image61Right_nice= cv2.remap(imgR_gray,62Right_Stereo_Map_x,63Right_Stereo_Map_y,64cv2.INTER_LANCZOS4,65cv2.BORDER_CONSTANT,660)6768# Updating the parameters based on the trackbar positions69numDisparities = cv2.getTrackbarPos('numDisparities','disp')*1670blockSize = cv2.getTrackbarPos('blockSize','disp')*2 + 571preFilterType = cv2.getTrackbarPos('preFilterType','disp')72preFilterSize = cv2.getTrackbarPos('preFilterSize','disp')*2 + 573preFilterCap = cv2.getTrackbarPos('preFilterCap','disp')74textureThreshold = cv2.getTrackbarPos('textureThreshold','disp')75uniquenessRatio = cv2.getTrackbarPos('uniquenessRatio','disp')76speckleRange = cv2.getTrackbarPos('speckleRange','disp')77speckleWindowSize = cv2.getTrackbarPos('speckleWindowSize','disp')*278disp12MaxDiff = cv2.getTrackbarPos('disp12MaxDiff','disp')79minDisparity = cv2.getTrackbarPos('minDisparity','disp')8081# Setting the updated parameters before computing disparity map82stereo.setNumDisparities(numDisparities)83stereo.setBlockSize(blockSize)84stereo.setPreFilterType(preFilterType)85stereo.setPreFilterSize(preFilterSize)86stereo.setPreFilterCap(preFilterCap)87stereo.setTextureThreshold(textureThreshold)88stereo.setUniquenessRatio(uniquenessRatio)89stereo.setSpeckleRange(speckleRange)90stereo.setSpeckleWindowSize(speckleWindowSize)91stereo.setDisp12MaxDiff(disp12MaxDiff)92stereo.setMinDisparity(minDisparity)9394# Calculating disparity using the StereoBM algorithm95disparity = stereo.compute(Left_nice,Right_nice)96# NOTE: compute returns a 16bit signed single channel image,97# CV_16S containing a disparity map scaled by 16. Hence it98# is essential to convert it to CV_32F and scale it down 16 times.99100# Converting to float32101disparity = disparity.astype(np.float32)102103# Scaling down the disparity values and normalizing them104disparity = (disparity/16.0 - minDisparity)/numDisparities105106# Displaying the disparity map107cv2.imshow("disp",disparity)108109# Close window using esc key110if cv2.waitKey(1) == 27:111break112113else:114CamL= cv2.VideoCapture(CamL_id)115CamR= cv2.VideoCapture(CamR_id)116117print("Saving depth estimation paraeters ......")118119cv_file = cv2.FileStorage("../data/depth_estmation_params_py.xml", cv2.FILE_STORAGE_WRITE)120cv_file.write("numDisparities",numDisparities)121cv_file.write("blockSize",blockSize)122cv_file.write("preFilterType",preFilterType)123cv_file.write("preFilterSize",preFilterSize)124cv_file.write("preFilterCap",preFilterCap)125cv_file.write("textureThreshold",textureThreshold)126cv_file.write("uniquenessRatio",uniquenessRatio)127cv_file.write("speckleRange",speckleRange)128cv_file.write("speckleWindowSize",speckleWindowSize)129cv_file.write("disp12MaxDiff",disp12MaxDiff)130cv_file.write("minDisparity",minDisparity)131cv_file.write("M",39.075)132cv_file.release()133134