将Java与OpenCV 3.4.3的SGBM模块一起使用,但不起作用

时间:2018-11-05 08:28:36

标签: java opencv

我正在尝试使用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

0 个答案:

没有答案