2012-12-17 43 views
0

我有以下代碼:OpenCV的:分配給類型int16_t的墊給所有零

string filename = "frame_00003_depth.bin"; 

int16_t* depth_img = loadDepthImageCompressed(filename.c_str()); 

Mat depth_img_meters = Mat(480, 640, CV_16UC1); 


for(int row = 0; row < 480; row++){ 
    for(int col = 0; col < 640; col++){ 
     depth_img_meters.at<int16_t>(row, col) = depth_img[(640*row + col)] * 0.001; 


     cout << depth_img_meters.at<int16_t>(row,col)<< "meters" << endl; 

    } 
} 

我已檢查該數組int16_t* depth_img具有值是大於100,但分配給這裏的Mat時打印全部爲零

+1

您將值乘以0.001,因此100 * 0.001將爲0.1,並且會被截斷爲零。 'depth_img'中的值是否大於1000? – WildCrustacean

+0

這是問題所在。如果你回答,我會接受 – Aly

+1

未來,@Aly,當你從一行代碼中意外行爲時,將代碼行分解成單獨的步驟(每個步驟都在自己的行中)。在每一步之後設置斷言(使用某種類型的'Assert'宏),甚至可以將狀態轉儲到'std :: cout'來描述正在發生的事情。至少,這將清楚地表明你的問題不在「分配給矩陣元素」組件中,而是在「我分配什麼值」組件中...... – Yakk

回答

1

對我來說看起來像截斷問題。

您由0.001乘以depth_img的值,這意味着號通常是在分配過程得到轉換成浮點數,然後回到int16_t。這意味着depth_img中任何小於1000的值將被截斷爲零depth_img_meters

任何時候處理不同的數據類型時,都必須注意與賦值過程中的這種隱式轉換相關的錯誤。

相關問題