2013-06-24 110 views
1

我不時有這個錯誤。我這次要發現它。明確的數學運算在opencv中給出了不正確的結果

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

trans,rotz,rotx是接收雙重類型數字的函數。

我不知道是什麼原因導致我每次堆棧更多的操作像這樣,返回值Mat tRo012變成了錯誤?

我記得遇到一個bug像類似於這樣:

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

NUM了不正確的值。我的解決方法是使用計算器並將顯式結果複製到num。但那不是一個好方法,不是嗎?

你對此有何評論?

謝謝!

+0

你在用什麼語言? – IanPudney

+0

我正在使用MSVS 2008中的C/C++ –

回答

2

如果您使用C或C++,編譯器可能會將您的常量解釋爲int並對它們進行整數運算,然後在完成後僅將最終結果轉換爲double。請嘗試以下操作:

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

在一個側面說明,如果你知道明確的數字(如您的num值),這是很好的做法,手動輸入號碼。這將使程序不必在運行時計算它。作爲優化過程的一部分,許多編譯器都會爲你做這件事,但它們不是必需的。

+0

謝謝!你說的是對的!我剛剛更改了我的代碼。我認爲輸入已知號碼是一種很好的做法。但是像這樣的詳細打字的數學運算將有助於提醒幾個有意義的值 –

相關問題