首页 文章

断言失败 . convertPointsFromHomogenous

提问于
浏览
3

执行我的代码时出现以下错误:

引起:CvException [org.opencv.core.CvException:cv :: Exception:/home/reports/ci/slave_desktop/50-SDK/opencv/modules/calib3d/src/fundam.cpp:1152:错误:( - 215)npoints> = 0 &&(src.depth()== CV_32F || src.depth()== CV_32S)函数void cv :: convertPointsFromHomogeneous(cv :: InputArray,cv :: OutputArray)

这是我正在使用的代码:

Mat res = new Mat(); // Result mat for triangulation

    Mat P1 = new Mat(3,4,CvType.CV_32F);
    double[] diagVal = {1,0,0,0,
                        0,1,0,0,
                        0,0,1,0};       
    P1.put(0, 0, diagVal);



    int[] max = new int[4];
    for(int i = 0; i < max.length; i++)
        max[i] = 0;

    Mat P2 = buildCameraMatrix(R1, T1);     
    Calib3d.triangulatePoints(P1, P2, objLeft, objRight, res);

TriangulatePoints导致类型为CV_32F的(914,4)Mat(res.type()== 5为真) .

我究竟做错了什么?

1 回答

  • 1

    我使用以下转换函数:

    private Mat convertPointsFromHomogeneous(Mat src) {
        Mat ret = new Mat(3, src.cols(), src.type());
        double[] data = new double[4];
        for (int i = 0; i < src.cols(); i++) {
            src.col(i).get(0, 0, data);
            ret.col(i).put(0, 0, data[0] / data[3], data[1] / data[3], data[2] / data[3]);
        }
        return ret;
    }
    

相关问题