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的主要内容,如果未能解决你的问题,请参考以下文章

调整图像类型“Mat”opencv C++的大小

OpenCVopencv3.0中的SVM训练 mnist 手写字体识别

opencvopencv2和opencv3共存——安装opencv2和opencv3到指定目录

python中音频图像识别和网页相关的库合集!

opencv:opencv概述

[转]缩放图像