首页 文章

Mat.Depth()Opencv

提问于
浏览
1

我正在使用Opencv开发LK光流方法 . 当我试图执行我的代码时,我收到以下错误 .

断言失败(ncorners> = 0 && corners.depth()== CV_32F)在cornerSubPix中,文件/tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140819-1745/modules/imgproc/src/cornersubpix .cpp,第257行终止在抛出'cv :: Exception'的实例后调用what():/ tmp / buildd / os-hydro-opencv2-2.4.9-2precise-20140819-1745/modules/imgproc/src/cornersubpix .cpp:257:错误:(-215)ncorners> = 0 && corners.depth()== CV_32F函数cornerSubPix

这是我的代码的一部分

vector<Point2f> cornersA; 
cornersA.reserve(maxCorners); 
vector<Point2f> cornersB; 
cornersB.reserve(maxCorners);


goodFeaturesToTrack( imgA,cornersA,maxCorners,qualityLevel,minDistance,cv::Mat(),blockSize,0,k);


cornerSubPix( imgA, cornersA, Size( win_size, win_size ), Size( -1, -1 ), 
              TermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03 ) );


// Call Lucas Kanade algorithm

我在互联网上查看了我收到的错误 . 它主要是因为定义了Point2d而不是Point2f . 我找不到更多的东西 . 我是这个地区的新手 . 如果你们能帮助我解决这个问题,那将是非常感激的 . 谢谢..

2 回答

  • 0

    我在Android / Java版OpenCV上遇到了同样的错误 . 我甚至抛弃了ncorners的 Value 来检查它,它似乎没问题 .

    当我在OLD图像上运行goodFeaturesToTrack和cornerSubPix并在新图像上运行它们时,它终于消失了 .

    所以也许试试吧

    goodFeaturesToTrack( imgB,cornersA,maxCorners,qualityLevel,minDistance,cv::Mat(),blockSize,0,k);
    
    
    cornerSubPix( imgB, cornersA, Size( win_size, win_size ), Size( -1, -1 ), 
              TermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03 ) );
    

    或者你称之为新形象的任何东西 . 如果有人能够解释为什么会发生这种情况,我很想知道 .

  • 0

    刚刚得到同样的错误 . 看 cornerSubPix() 源代码:

    void cv::cornerSubPix( InputArray _image, InputOutputArray _corners,
                       Size winSize, Size zeroZone,
                       TermCriteria criteria )
    {
        Mat corners = _corners.getMat();
        int ncorners = corners.checkVector(2);
        CV_Assert( ncorners >= 0 && corners.depth() == CV_32F );
        Mat image = _image.getMat();
              ...
    }
    

    所以,这只有两个可能的原因 .

    • _corners 不是合适的类型 .

    • _corners.checkVector(2) 返回否定 - >检查是否有空 _corners 数组(这是我的情况) .

相关问题