Mat OpenCv的赋值错误

时间:2011-12-19 10:10:47

标签: c++ opencv

我正在使用OpenCV和C ++进行项目,我发现了以下问题:使用以下语句初始化mat后

Mat or_mat=Mat(img->height,img->width,CV_32FC1);

检查以下值

or_mat.at <float> (i, j) = atan (fy / fx) / 2 +1.5707963;

完成返回功能输出的mat后,但是当我去读取时,有许多值与输出不对应。插入I-4.31602e +008的精确值不正确,如果我设置cout表达式的值是正确的。可能是什么错误??

相关代码:

Mat or_mat=Mat(img->height,img->width,CV_32FC1);

to angle
if(fx > 0){   
    or_mat.at<float>(i,j) = atan(fy/fx)/2+1.5707963;
}
else if(fx<0 && fy >0){   
    or_mat.at<float>(i,j) = atan(fy/fx)/2+3.1415926;
}
else if(fx<0 && fy <0){   
    or_mat.at<float>(i,j) = atan(fy/fx)/2;
}
else if(fy!=0 && fx==0){   
    or_mat.at<float>(i,j) = 1.5707963;
}

我必须计算指纹图像的局部方向,下面的代码我省略了几个没有错误的语句和计算。

1 个答案:

答案 0 :(得分:2)

我会三重检查您是否正确索引。下面的代码显示我初始化一个充满零的矩阵,然后使用.at运算符填充一些浮点数。它可以很好地编译和运行:

int main()
{

    int height = 10;
    int width = 3;

    // Initialise or_mat to with every element set to zero
    cv::Mat or_mat = cv::Mat::zeros(height, width, CV_32FC1);
    std::cout << "Original or_mat:\n" << or_mat << std::endl;

    // Loop through and set each element equal to some float
    float value = 10.254;
    for (int i = 0; i < or_mat.rows; ++i)
    {
        for (int j = 0; j < or_mat.cols; ++j)
        {
            or_mat.at<float>(i,j) = value;
        }
    }

    std::cout << "Final or_mat:\n" << or_mat << std::endl;

    return 0;
}