单通道OpenCV Mat.at<>给出了错误的价值观

时间:2016-07-07 03:58:03

标签: c++ opencv types cout mat

声明Mat图像并指定值。

resque-worker

打印上面的垫子:

Mat magnitude = Mat(gradient_columns.cols, gradient_columns.rows, CV_64FC1);
for(int i = 0; i < gradient_columns.cols; i++)
{
    for(int j = 0; j < gradient_columns.rows; j++)
    {
        magnitude.at<double>(Point(i,j)) = (double)hypot(gradient_columns.at<double>(Point(i,j)), gradient_rows.at<double>(Point(i,j)));
    }
}

结果:

cout << "M = " << magnitude << endl;

上述结果完全正确并符合预期。

但是,如果我尝试打印单个值,我会得到错误的结果:

M = [0, 0, 0.1257399049164523, 12.36316814720732, 12.50461780753356, 0.2674320707434279, 10.39230484541326, 12.03299037437945, 5.430256687374658, 
12.03299037437945, 4.684492386402418, 4.72934192083521, 12.16431633381293, 5.397674732957373, 12.30042244512288, 10.25834261322606, 0.3944487245360109, 
12.16431633381293, 11.84297951775486, 12.44187210544911, 12.10132213098092, 
0.4088817310696626, 10.15078660267586, 12.09573607646389, 2.076275433221507, 0, 0.1257399049164523, 0, 0.1257399049164523, 0;
.....
.....]

我了解它的一些数据类型转换问题,但是如果有人可以建议任何解决方案吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我相信你的矩阵没有问题。你只是不打印你认为自己的东西。

撰写magnitude.at<double>(Point(0,2))时,您不会按预期在第0行和第2列打印数字,而是在第2行和第0行中打印数字。请尝试编写magnitude.at<double>(0,2)