2016-05-16 39 views
2

我嘗試將boost :: array rightCamInfo.K轉換爲opencv墊cv :: Mat K。我沒有發現這個設置的任何功能,所以我寫了一個迭代方法:轉換增強陣列以打開cv墊

float tempK[9]; 
cv::Mat K; 
for (int i = 0; i < 9; i++) { 
    tempK[i] = rightCamInfo.K[i]; 
} 
K = cv::Mat(3, 3, CV_64F, &tempK); 

但是這給了我奇怪的結果。給定數據的範圍在400和0之間,結果矩陣約爲5 * 10 ^( - 315)。所以顯然有一些轉換錯誤。哪裏不對?我爲矩陣選擇了錯誤的類型還是這種數組類型不合適?

回答

4

您應該使用CV_32FCV_64F和點的tempK

K = cv::Mat(3, 3, CV_32F, &tempK[0]); 

Mat K(3, 3, CV_32F, &tempK[0]); 
+0

這樣的小東西的第一個元素,但它的工作原理。謝謝。你能否簡要解釋爲什麼這有所作爲? – BeJay

+1

'CV_32F(32位)'表示我正在讀取的字節是浮點數,而'CV_64F'表示它是雙精度(64位)'。當您嘗試使用CV_64F讀取時,您嘗試讀取float值,就像它是double一樣。 – smttsp