From 2c3aee2937789f49efc30e0298885a68cda94d27 Mon Sep 17 00:00:00 2001 From: ros Date: Thu, 23 Mar 2023 12:05:56 +0100 Subject: [PATCH] fin de session --- disparityParam_gui.py | 142 ++++++++++++++++++++++++++++++++++++++++++ movie3D.py | 46 ++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 disparityParam_gui.py create mode 100644 movie3D.py diff --git a/disparityParam_gui.py b/disparityParam_gui.py new file mode 100644 index 0000000..0b450c9 --- /dev/null +++ b/disparityParam_gui.py @@ -0,0 +1,142 @@ +import numpy as np +import cv2 + + +# Check for left and right camera IDs +# These values can change depending on the system +CamL_id = 1# Camera ID for left camera +CamR_id = 5# Camera ID for right camera + +CamL= cv2.VideoCapture(CamL_id) +CamR= cv2.VideoCapture(CamR_id) + + + + +retL, imgL= CamL.read() +retR, imgR= CamR.read() + +imgR_gray = cv2.cvtColor(imgR,cv2.COLOR_BGR2GRAY) +imgL_gray = cv2.cvtColor(imgL,cv2.COLOR_BGR2GRAY) +print("la c bon") +# Reading the mapping values for stereo image rectification +cv_file = cv2.FileStorage("data/params_py.xml", cv2.FILE_STORAGE_READ) +Left_Stereo_Map_x = cv_file.getNode("Left_Stereo_Map_x").mat() +Left_Stereo_Map_y = cv_file.getNode("Left_Stereo_Map_y").mat() +Right_Stereo_Map_x = cv_file.getNode("Right_Stereo_Map_x").mat() +Right_Stereo_Map_y = cv_file.getNode("Right_Stereo_Map_y").mat() +cv_file.release() + +def nothing(x): + pass + +cv2.namedWindow('disp',cv2.WINDOW_NORMAL) +cv2.resizeWindow('disp',600,600) + +cv2.createTrackbar('numDisparities','disp',1,17,nothing) +cv2.createTrackbar('blockSize','disp',5,50,nothing) +cv2.createTrackbar('preFilterType','disp',1,1,nothing) +cv2.createTrackbar('preFilterSize','disp',2,25,nothing) +cv2.createTrackbar('preFilterCap','disp',5,62,nothing) +cv2.createTrackbar('textureThreshold','disp',10,100,nothing) +cv2.createTrackbar('uniquenessRatio','disp',15,100,nothing) +cv2.createTrackbar('speckleRange','disp',0,100,nothing) +cv2.createTrackbar('speckleWindowSize','disp',3,25,nothing) +cv2.createTrackbar('disp12MaxDiff','disp',5,25,nothing) +cv2.createTrackbar('minDisparity','disp',5,25,nothing) + +# Creating an object of StereoBM algorithm +stereo = cv2.StereoBM_create() +while True: + + # Capturing and storing left and right camera images + retL, imgL= CamL.read() + retR, imgR= CamR.read() + + # Proceed only if the frames have been captured + if retL and retR: + imgR_gray = cv2.cvtColor(imgR,cv2.COLOR_BGR2GRAY) + imgL_gray = cv2.cvtColor(imgL,cv2.COLOR_BGR2GRAY) + + # Applying stereo image rectification on the left image + Left_nice= cv2.remap(imgL_gray, + Left_Stereo_Map_x, + Left_Stereo_Map_y, + cv2.INTER_LANCZOS4, + cv2.BORDER_CONSTANT, + 0) + + # Applying stereo image rectification on the right image + Right_nice= cv2.remap(imgR_gray, + Right_Stereo_Map_x, + Right_Stereo_Map_y, + cv2.INTER_LANCZOS4, + cv2.BORDER_CONSTANT, + 0) + + # Updating the parameters based on the trackbar positions + numDisparities = cv2.getTrackbarPos('numDisparities','disp')*16 + blockSize = cv2.getTrackbarPos('blockSize','disp')*2 + 5 + preFilterType = cv2.getTrackbarPos('preFilterType','disp') + preFilterSize = cv2.getTrackbarPos('preFilterSize','disp')*2 + 5 + preFilterCap = cv2.getTrackbarPos('preFilterCap','disp') + textureThreshold = cv2.getTrackbarPos('textureThreshold','disp') + uniquenessRatio = cv2.getTrackbarPos('uniquenessRatio','disp') + speckleRange = cv2.getTrackbarPos('speckleRange','disp') + speckleWindowSize = cv2.getTrackbarPos('speckleWindowSize','disp')*2 + disp12MaxDiff = cv2.getTrackbarPos('disp12MaxDiff','disp') + minDisparity = cv2.getTrackbarPos('minDisparity','disp') + + # Setting the updated parameters before computing disparity map + stereo.setNumDisparities(numDisparities) + stereo.setBlockSize(blockSize) + stereo.setPreFilterType(preFilterType) + stereo.setPreFilterSize(preFilterSize) + stereo.setPreFilterCap(preFilterCap) + stereo.setTextureThreshold(textureThreshold) + stereo.setUniquenessRatio(uniquenessRatio) + stereo.setSpeckleRange(speckleRange) + stereo.setSpeckleWindowSize(speckleWindowSize) + stereo.setDisp12MaxDiff(disp12MaxDiff) + stereo.setMinDisparity(minDisparity) + + # Calculating disparity using the StereoBM algorithm + disparity = stereo.compute(Left_nice,Right_nice) + # NOTE: compute returns a 16bit signed single channel image, + # CV_16S containing a disparity map scaled by 16. Hence it + # is essential to convert it to CV_32F and scale it down 16 times. + + # Converting to float32 + disparity = disparity.astype(np.float32) + + # Scaling down the disparity values and normalizing them + disparity = (disparity/16.0 - minDisparity)/numDisparities + + # Displaying the disparity map + cv2.imshow("disp",disparity) + + # Close window using esc key + if cv2.waitKey(1) == 27: + break + + else: + CamL= cv2.VideoCapture(CamL_id) + CamR= cv2.VideoCapture(CamR_id) + +print("Saving depth estimation paraeters ......") + +cv_file = cv2.FileStorage("../data/depth_estmation_params_py.xml", cv2.FILE_STORAGE_WRITE) +cv_file.write("numDisparities",numDisparities) +cv_file.write("blockSize",blockSize) +cv_file.write("preFilterType",preFilterType) +cv_file.write("preFilterSize",preFilterSize) +cv_file.write("preFilterCap",preFilterCap) +cv_file.write("textureThreshold",textureThreshold) +cv_file.write("uniquenessRatio",uniquenessRatio) +cv_file.write("speckleRange",speckleRange) +cv_file.write("speckleWindowSize",speckleWindowSize) +cv_file.write("disp12MaxDiff",disp12MaxDiff) +cv_file.write("minDisparity",minDisparity) +cv_file.write("M",39.075) +cv_file.release() + diff --git a/movie3D.py b/movie3D.py new file mode 100644 index 0000000..31f3709 --- /dev/null +++ b/movie3D.py @@ -0,0 +1,46 @@ +import numpy as np +import cv2 + + +CamL_id = "data/stereoL.mp4" +CamR_id = "data/stereoR.mp4" + +CamL= cv2.VideoCapture(CamL_id) +CamR= cv2.VideoCapture(CamR_id) + +print("Reading parameters ......") +cv_file = cv2.FileStorage("data/params_py.xml", cv2.FILE_STORAGE_READ) + +Left_Stereo_Map_x = cv_file.getNode("Left_Stereo_Map_x").mat() +Left_Stereo_Map_y = cv_file.getNode("Left_Stereo_Map_y").mat() +Right_Stereo_Map_x = cv_file.getNode("Right_Stereo_Map_x").mat() +Right_Stereo_Map_y = cv_file.getNode("Right_Stereo_Map_y").mat() +cv_file.release() + + +while True: + retR, imgR= CamR.read() + retL, imgL= CamL.read() + + if retL and retR: + imgR_gray = cv2.cvtColor(imgR,cv2.COLOR_BGR2GRAY) + imgL_gray = cv2.cvtColor(imgL,cv2.COLOR_BGR2GRAY) + + Left_nice= cv2.remap(imgL,Left_Stereo_Map_x,Left_Stereo_Map_y, cv2.INTER_LANCZOS4, cv2.BORDER_CONSTANT, 0) + Right_nice= cv2.remap(imgR,Right_Stereo_Map_x,Right_Stereo_Map_y, cv2.INTER_LANCZOS4, cv2.BORDER_CONSTANT, 0) + + output = Right_nice.copy() + output[:,:,0] = Right_nice[:,:,0] + output[:,:,1] = Right_nice[:,:,1] + output[:,:,2] = Left_nice[:,:,2] + + # output = Left_nice+Right_nice + output = cv2.resize(output,(700,700)) + cv2.namedWindow("3D movie",cv2.WINDOW_NORMAL) + cv2.resizeWindow("3D movie",700,700) + cv2.imshow("3D movie",output) + + cv2.waitKey(1) + + else: + break