2017-07-02 14 views
0

OpenCVで2D浮動小数点配列を使用してMatオブジェクトを初期化しようとしました。私はCV_64FC1としてMatのデータ型を設定し、Matを出力します。プリント結果は初期化2D配列とは異なります。CV_32FC1からCV_64FC1への結果が不正なデータ変換

void testConversion() 
{ float data[10][2] = 
{ 
    {2.5, 2.4}, 
    {0.5, 0.7}, 
    {2.2, 2.9}, 
    {1.9, 2.2}, 
    {3.1, 3.0}, 
    {2.3, 2.7}, 
    {2,  1.6}, 
    {1,  1.1}, 
    {1.5, 1.6}, 
    {1.1, 0.9} 
}; 


    Mat 
    mData(10,2,CV_64FC1,&data); 
    cout<<"mData\n"<< mData <<endl; 

    return; 
} 

結果プリントアウトとして表示:私は

Mat 
mData(10,2,CV_32FC1,&data); 

Mat 
mData(10,2,CV_64FC1,&data); 

を変更した場合にのみ動作します

[6.400002481415868, 0.0002929687607320375; 
25.60000992119312, 3.600000857934356; 
32.00000766217708, 14.40000343546271; 
0.2250000536441803, 0.01406250333820935; 
0.225000053527765, 0.002734374717329047; 
2.541574442831658e-173, 1.956130224762901e-304; 
2.779084519612415e-308, 7.165336730703368e-317; 
1.#QNAN, -9.255963134931783e+061; 
-9.255963134931783e+061, -9.255963134931783e+061; 
-9.255963134931783e+061, -9.255963134931783e+061] 

誰かが理由を説明してもらえますか?前もって感謝します。

答えて

1

問題の原因は、配列の型(float)とOpenCVの型パラメータCV_64FC1の間に不一致があるためです。

パラメータCV_64FC1は、データ配列を値ごとに64ビットの倍数の配列として扱う必要があると判断します。

しかし、Youir配列は浮動小数点型で、値ごとに32ビットを持ちます。 したがって、この場合はCV_32FC1を使用するのが適切です。

関連する問題