我正在使用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;
}
我必须计算指纹图像的局部方向,下面的代码我省略了几个没有错误的语句和计算。
答案 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;
}