I want to get real distance of an object from stereo camera. I am using OpenCV example code as given in Learning OpenCV O'Reilly book. After getting disparity map I want to use the formula:
distance = focal_length * baseline distance / disparity
The problem is :
I am getting negative values of disparities. How to convert these values so that they might be used in actual depth calculation ?
In above formula focal length and baseline distance are in mm (returned by reprojection matrix) whereas disparity will be in pixels. So the result will be in mm^2/pixel. How to convert disparity value from pixel to mm.
You need to perform a camera calibration step first, to get a proper parameters, know as camera matrix.
One you have these values, you can perform a proper computation of the disparity map with the corrected values (the one got from the camera calibration step, know as remapping or undistortion) and then, to obtain the real depth (in mm or meters), you can finally do:
depth = baseline * focal / disparity
you can use CVs stereo correspondence functions, such as Stereo Block Matching or Semi Global Block Matching. This will give you a disparity map for the entire image which can be transformed to 3D points using the Q matrix (cv::reprojectImageTo3D).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With