I am trying to get depth from 2 rectified images using openCV ,i took this code from here
opencv-depth . I want to understand how the program works ,but i couldn’t find any documentation.
import gab.opencv.*;
import org.opencv.core.Mat;
import org.opencv.calib3d.StereoBM;
import org.opencv.core.CvType;
import org.opencv.calib3d.StereoSGBM;
OpenCV ocvL, ocvR;
PImage imgL, imgR, depth1, depth2;
void setup() {
imgL = loadImage("scene_l.jpg");
imgR = loadImage("scene_r.jpg");
ocvL = new OpenCV(this, imgL);
ocvR = new OpenCV(this, imgR);
size(768, 576);
ocvL.gray();
ocvR.gray();
Mat left = ocvL.getGray();
Mat right = ocvR.getGray();
Mat disparity = OpenCV.imitate(left);
StereoSGBM stereo = new StereoSGBM(0, 32, 3, 128, 256, 20, 16, 1, 100, 20, true);
stereo.compute(left, right, disparity );
Mat depthMat = OpenCV.imitate(left);
disparity.convertTo(depthMat, depthMat.type());
depth1 = createImage(depthMat.width(), depthMat.height(), RGB);
ocvL.toPImage(depthMat, depth1);
StereoBM stereo2 = new StereoBM();
stereo2.compute(left, right, disparity );
disparity.convertTo(depthMat, depthMat.type());
depth2 = createImage(depthMat.width(), depthMat.height(), RGB);
ocvL.toPImage(depthMat, depth2);
}
void draw() {
image(imgL, 0, 0);
image(imgR, imgL.width, 0);
image(depth1, 0, imgL.height);
image(depth2, imgL.width, imgL.height);
fill(255, 0, 0);
text("left", 10, 20);
text("right", 10 + imgL.width, 20);
text("stereo SGBM", 10, imgL.height + 20);
text("stereo BM", 10 + imgL.width, imgL.height+ 20);
}
For this set of images it works very good
image_l
image_r
depth
If i run the code with another images i have a bad output
image_l
image_r
depth