我正在研究使用Opencv的LK光流方法。当我试图执行我的代码时,我会收到以下错误。
断言失败( /tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140819-1745/modules/imgproc/src/cornersubpix.cpp,文件>= 0 && corners.depth() == CV_32F)第257行在抛出'cv::Exception‘实例之后调用/tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140819-1745/modules/imgproc/src/cornersubpix.cpp:257:错误:(-215) >= 0& corners.depth()函数cornerSubPix中的== CV_32F
这是我代码的一部分
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。我找不到更多的东西了。我是这个地区的新手。如果你们能帮我解决这个问题,我会很感激的。谢谢..
发布于 2014-10-14 03:34:32
我对安卓/Java版本的OpenCV也犯了同样的错误。我甚至抛掉了角落的价值来检查它,这似乎没什么问题。
当我停止在旧映像上运行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 ) );或者任何你称之为新形象的东西。如果有人能搞清楚为什么会这样,我很想知道。
发布于 2017-01-20 16:20:41
只是犯了同样的错误。查看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数组(这就是我的情况)。https://stackoverflow.com/questions/25959752
复制相似问题