【问题标题】:Assertion failed. convertPointsFromHomogenous断言失败。 convertPointsFromHomogenous
【发布时间】:2014-06-10 23:36:48
【问题描述】:

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

原因: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 为真)。

我做错了什么?

【问题讨论】:

  • convertPointsFromHomogeneous 在哪里调用?

标签: java opencv


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2011-05-27
    • 2021-03-16
    • 2010-09-26
    • 2018-11-09
    • 2021-01-20
    • 2014-02-10
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多