cv::Mat
配列からのデータで初期化されるfloat *
変数を作成する必要があります。これは基本的なはずですが、理解するのに苦労しています。
私はコードを持っています:
float *matrixAB = <120 floating point array created elsewhere>;
cv::Mat cv_matrixAB = cv::Mat(12, 10, CV_32F, &matrixAB);
ただし、cv_matrixAB
にはfloat
値が含まれることはなく、さらに重要なことには、matrixAB
に含まれるデータと一致しません。
行を次のように変更した場合:
cv::Mat cv_matrixAB = cv::Mat(12, 10, CV_32F, matrixAB);
cv_matrixAB.data
はすべて0
です。タイプとしてCV_64F
を使用しようとしましたが、同じ振る舞いが見られます。
誰が間違っているのかを特定するのを手伝ってくれますか?cv::Mat
コンストラクターのドキュメントによると、float *
配列の形式でデータを提供できるはずです。
更新:ここでもう少し情報:次のコードでも機能しません。 printf
は63
を表示しますが、これはもちろんdummy_query_data
の値ではありません。
float dummy_query_data[10] = { 1, 2, 3, 4,
5, 6, 7, 8 };
cv::Mat dummy_query = cv::Mat(2, 4, CV_32F, dummy_query_data);
printf("%f\n", (float)dummy_query.data[3]);
あなたはよくやっている。ただし、 _.data
_ (_uchar *
_)の代わりにat<float>()
を使用してmat要素にアクセスする必要があります。または、単に_cout << mat;
_を使用して、そのすべての要素を出力します。期待どおりの結果が得られます。
_float dummy_query_data[10] = { 1, 2, 3, 4, 5, 6, 7, 8 };
cv::Mat dummy_query = cv::Mat(2, 4, CV_32F, dummy_query_data);
cout << dummy_query.at<float>(0,2) << endl;
cout << dummy_query << endl;
_
出力されます:
_3
[1, 2, 3, 4;
5, 6, 7, 8]
_