显式数学运算在opencv中给出了错误的结果

时间:2013-06-24 16:26:19

标签: c++ opencv

我不时有这个bug。我这次必须揭开它。

Mat tRo012 = trans(165, 135, 85)*rotz(-11/180*CV_PI)*rotx((-90-15)/180*CV_PI);

trans,rotz,rotx是接收双重型号的函数。

我想知道是什么原因导致我每次堆叠更多这样的操作,返回值,Mat tRo012会出错?

我记得遇到类似这样的错误:

double num = (-90-15)/180*CV_PI;

num得到的值不正确。我为方法做的是使用计算器并将显式结果复制到num。但这不是一个好方法,不是吗?

你对此有何评论?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您正在使用C或C ++,您的编译器可能会将您的常量解释为类型int并对它们执行整数运算,然后仅在完成后将最终结果转换为double。请尝试以下方法:

double num = (-90.0-15.0)/180.0*CV_PI;

在旁注中,如果您知道显式数字(例如num值),则最好手动输入数字。这将使程序不必在运行时计算它。作为优化过程的一部分,许多编译器都会为您执行此操作,但不需要它们。