我正在研究使用Opencv的LK Optical Flow方法。当我试图执行我的代码时,我收到以下错误。Mat.Depth()Opencv
Assertion failed (ncorners >= 0 && corners.depth() == CV_32F) in cornerSubPix, file /tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140819-1745/modules/imgproc/src/cornersubpix.cpp, line 257 terminate called after throwing an instance of 'cv::Exception' what(): /tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140819-1745/modules/imgproc/src/cornersubpix.cpp:257: error: (-215) ncorners >= 0 && corners.depth() == CV_32F in function 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。我找不到比这更多的东西。我是这个领域的新手。如果你们能帮我解决这个问题,我将非常感激。谢谢..
看起来像使用Point2f只是断言的一半。你必须确保ncorners> = 0。我假设ncorners指的是'角落A',这是空的(没有找到功能?)。在调用'cornerSubPix'之前检查'cornersA.size()'。 – Thomas 2014-09-21 14:23:53