web-dev-qa-db-ja.com

float配列のデータでcv :: Matを初期化するにはどうすればよいですか

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 *配列の形式でデータを提供できるはずです。

更新:ここでもう少し情報:次のコードでも機能しません。 printf63を表示しますが、これはもちろん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]);
15
Brett

あなたはよくやっている。ただし、 _.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]
_
27
herohuyongtao