0

次のコードがあります。

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ここに割り当てるとすべてゼロが出力されます

4

1 に答える 1

1

私には切り捨ての問題のように見えます。

の値にdepth_img0.001 を掛けています。これは、数値が浮動小数点に変換さint16_tれ、割り当てプロセスで元に戻されることを意味します。これは、1000 インチ未満の値はdepth_imgゼロに切り捨てられることを意味します。depth_img_meters

さまざまなデータ型を扱うときはいつでも、割り当て中のこの種の暗黙的な変換に関連するエラーに注意する必要があります。

于 2012-12-17T15:19:38.727 に答える