OpenCV Mat :: at line 537断言失败错误

时间:2014-09-30 16:02:16

标签: c++ opencv

我在Mat :: at

的第537行收到断言失败错误
  

OpenCV错误:断言失败(dims< = 2&& data&&(unsigned)i0<(unsigned)si ze.p [0]&&&(unsigned)(i1 * DataType< ; _Tp> :: channels)<(unsigned)(size.p [1] * channel s())&&((((sizeof(size_t)<<< 28)| 0x8442211)>> ((DataType< _Tp> :: depth)&((1<<< 3) - 1))* 4)& 15)== elemSize1())在未知函数中,文件c:\ users \ tim \文件s \ code \ opencv \ build \ include \ opencv2 \ core \ mat.hpp,第537行

我正在尝试填充我将在函数cv :: remap中使用的矩阵。 导致此失败断言的代码部分如下:

void Functions::PopulatedMapY(Mat image)
{
    mapy.create(image.rows, image.cols, CV_32FC1);
    for (int j = 0; j<image.rows; j++)
    {   
        float a = (image.rows - 1) - gazey;
        float b = (image.cols - 1) - gazex;
        for (int i = 0; i<image.cols; i++)
        {       
            mapy.at<float>(j,i) = map2y.at<float>(a+j,b+i);
        }   
    }
}

矩阵map2y在MapCreator函数中定义如下:

void Functions::MapCreator(Mat image, float const_a, float const_b)
{
    map2x.create(2*image.rows, 2*image.cols, CV_32FC1);
    map2y.create(2*image.rows, 2*image.cols, CV_32FC1);

    for (int m = 0; m<2*image.rows; m++)
    {
        ty = image.rows - m;
        for (int n = 0; n<2*image.cols; n++)
        {
            tx = image.cols - n;
            map2x.at<float>(m,n) = n;
            map2y.at<float>(m,n) = m +const_b*exp(-pow(tx,2)/pow(const_a, 2))*Signum(ty);

    }
    }

}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

根据您的错误代码,您可以在Mat::at调用后发现断言失败,并且在此方法中,如果出现以下情况,则代码将变为false:
一个。 nr。渠道小于2 湾数据为空 C。 (无符号)i0&lt; (无符号)size.p [0]
加上其他一些。
在你的情况下我的建议是nr。渠道。 CV_32FC1就是这样的:
CV_&LT; bit_depth&gt; (S | U | F)℃下nr_channels&gt;。我想这里是问题,模板参数或数据为空。
我的解决方案只是使用CV_32F。
作为一个重要的参考,请看这里:
OpenCV Error: Assertion failed, mat.cpp line 537