Je dois créer un cv::Mat
variable qui est initialisée avec mes données à partir d'un float *
tableau. Cela devrait être basique, mais j'ai du mal à le comprendre.
J'ai le code:
float *matrixAB = <120 floating point array created elsewhere>;
cv::Mat cv_matrixAB = cv::Mat(12, 10, CV_32F, &matrixAB);
mais cv_matrixAB
ne contient jamais de valeurs float
et, surtout, ne correspond pas aux données contenues dans matrixAB
.
Si je change la ligne en:
cv::Mat cv_matrixAB = cv::Mat(12, 10, CV_32F, matrixAB);
puis le cv_matrixAB.data
sont tous 0
. J'ai également essayé d'utiliser CV_64F
comme type, mais je vois le même comportement.
Quelqu'un peut-il m'aider à identifier où je me trompe? Selon le cv::Mat
documentation constructeur, je devrais être en mesure de fournir mes données sous la forme d'un float *
tableau.
pdate: un peu plus d'informations ici: Même le code suivant ne fonctionne pas. printf
affiche 63
, ce qui bien sûr n'est pas une valeur dans 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]);
Tu t'en sors bien. Mais vous devez accéder à l'élément mat en utilisant at<float>()
au lieu de .data
(ce qui vous donnera uchar *
). Ou utilisez simplement cout << mat;
pour imprimer tous ses éléments. Cela vous donnera le résultat attendu.
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;
Il produira:
3
[1, 2, 3, 4;
5, 6, 7, 8]