Mat.Depth() Opencv
Posted
技术标签:
【中文标题】Mat.Depth() Opencv【英文标题】: 【发布时间】:2014-09-21 13:32:53 【问题描述】:我正在使用 Opencv 研究 LK 光流方法。当我尝试执行我的代码时,我收到以下错误。
在cornerSubPix,文件/tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140819-1745/modules/imgproc/src 中断言失败(ncorners >= 0 && corners.depth() == CV_32F) /cornersubpix.cpp,第 257 行 在抛出 'cv::Exception' 的实例后调用终止 什么():/tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140819-1745/modules/imgproc/src/cornersubpix.cpp:257:错误:(-215)ncorners >= 0 && 角。 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。我找不到比这更多的东西了。我是这个地区的新手。如果你们能帮我解决这个问题,我将不胜感激。谢谢..
【问题讨论】:
看起来使用 Point2f 只是断言的一半。您还必须确保 ncorners >=0。我假设 ncorners 指的是cornersA
,这是空的(没有找到功能?)。在调用cornerSubPix
之前检查cornersA.size()
。
【参考方案1】:
我在使用 android/Java 版本的 OpenCV 时遇到了同样的错误。我什至放弃了 ncorners 的价值来检查它,它看起来还不错。
当我停止在旧图像上运行 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 ) );
或任何你称之为新图像的东西。如果有人能弄清楚为什么会这样,我很想知道。
【讨论】:
【参考方案2】:刚刚遇到同样的错误。看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
数组(这是我的情况)。
【讨论】:
以上是关于Mat.Depth() Opencv的主要内容,如果未能解决你的问题,请参考以下文章
OpenCVopencv3.0中的SVM训练 mnist 手写字体识别