我正在尝试使用Java接口在StereoSGBM
模块上运行一个简单的测试,但是结果什么也没有显示。我已经在线检查了一些代码,并确认程序中的设置在可以使用的正确范围内,但是我只能在C ++中找到OOP
示例作为参考。似乎很难找到有关OpenCV SGBM
的Java示例。您能帮我找出代码中的问题吗?。
这是我的代码:
package com.huang825172.java;
import org.opencv.calib3d.StereoSGBM;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import static org.opencv.core.CvType.CV_8U;
import static org.opencv.highgui.HighGui.*;
public class Main {
static{System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}
public static void main(String[] args) {
System.out.println(Core.VERSION);
Mat left = Imgcodecs.imread("C:\\left.png");
Mat right = Imgcodecs.imread("C:\\right.png");
int cn = left.channels();
StereoSGBM sgbm = StereoSGBM.create();
sgbm.setPreFilterCap(63);
sgbm.setBlockSize(9);
sgbm.setP1(8*cn*sgbm.getBlockSize()*sgbm.getBlockSize());
sgbm.setP2(32*cn*sgbm.getBlockSize()*sgbm.getBlockSize());
sgbm.setMinDisparity(0);
sgbm.setNumDisparities(64);
sgbm.setUniquenessRatio(10);
sgbm.setSpeckleWindowSize(100);
sgbm.setSpeckleRange(12);
sgbm.setDisp12MaxDiff(1);
sgbm.setMode(StereoSGBM.MODE_SGBM);
Mat disp = new Mat();
Mat disp8 = new Mat();
sgbm.compute(left,right,disp);
System.out.println(disp.toString());
disp.convertTo(disp8,CV_8U,255/(64*16));
namedWindow("Left",1);
namedWindow("Right",1);
namedWindow("Disparity",1);
imshow("Left",left);
imshow("Right",right);
imshow("Disparity",disp8);
waitKey();
destroyAllWindows();
return;
}
}
它只会导致一个黑色的窗口 the result