OpenCV fitLine异常

时间:2012-11-05 12:06:01

标签: c++ opencv

我正在使用OpenCV fitLine()函数。

有时会抛出以下异常:

..\opencv\modules\core\src\matrix.cpp:1219: error: (-215) 
dims == 2 && ((size[0] == sz.height && size[1] == sz.width) || (allocateVector 
&& size[0] == sz.width && size[1] == sz.height)) in function create 

也有一些断言失败了:

OpenCV Error: Assertion failed (dims == 2 && ((size[0] == sz.height &&
size[1] == sz.width) || (allocateVector && size[0] == sz.width && 
size[1] == sz.height))) in create

有人有类似的问题吗?也许点数对于拟合线来说太糟糕了?我应该更改fitLine()函数参数吗?

代码

cv::Vec4f newLine;
if(temp.size() >= 2)
{
    qDebug()<<"Correcting line";
    std::vector<cv::Point2f> temp2;
    for(std::vector<std::pair<cv::Point2f,float> >::iterator i = temp.begin();
        i != temp.end(); i++)
    {
        temp2.push_back((*i).first);
    }
    qDebug()<<"temp2 size: "<<temp2.size();
    try{
        cv::fitLine(temp2,newLine,CV_DIST_HUBER,0,0.01,0.01);
    }
    catch(cv::Exception e)
    {
        qDebug()<<e.what();
    }

我已将Vec4f newLine更改为std::vector<float> newLine(4)并且有效。为什么呢?

2 个答案:

答案 0 :(得分:0)

那些断言只是检查数据的尺寸是否正确(例如,2D或3D点的集合)。因此,如果他们被提出,你可能没有正确初始化你的数据,但我没有代码

答案 1 :(得分:0)

此异常是由空Mat生成的,因此检查是否为空:

    if (locations.rows != 0 ) {
        //do stuff
    }