使用 OpenCV 和 Android NDK 转换数据格式

Converting data formats using OpenCV with Android NDK

本文关键字:转换 数据格式 NDK Android OpenCV 使用      更新时间:2023-10-16

我正在尝试查看从opencv函数knn返回的响应。我尝试使用cout函数,就像大多数示例显示的那样,但这在Android NDK中不起作用。

响应应该是 3 个值,[1,2,3],当我做 response.cols 时,答案是 3,所以我知道数据在那里,但我找不到正确的格式来打印或检查数据以查看是否返回了正确的响应。

从 knn->findNearest 返回的值 "response" 的格式为 OutputArray。

我尝试了以下方法,但它们输出奇怪的数据:

int K=3;
Mat response;
Mat dist;
knn->findNearest(testFeature, K, noArray(), response, dist);
int *responseToInt = (int*)response.data;
int nearestNeighbors[3];
for(int i = 0; i < response.cols; i++){
    nearestNeighbors[i] = responseToInt[i];
}

输出:

最近邻居[0] = 1077936128

最近邻居[1] = 1077936128

最近邻居 [2] = 1077936128

int K=3;
Mat response;
Mat dist;
knn->findNearest(testFeature, K, noArray(), response, dist);
uchar* responseToChar = response.data;
char nearestNeighbors[3] = "";
for(int i = 0; i < response.cols; i++){
    nearestNeighbors[i] = responseToChar[i];
}

输出:

最近邻居[0] = \0

最近邻居[1] = \0

最近邻居[2] = @

您可以在其文档中查看返回的函数。例如,看看 findNearest

邻居响应 – 相应 邻居。它是一个单精度浮点矩阵 * K 大小。

请注意单精度浮点

这意味着结果是 Mat 数据存储为浮点数,这意味着您可以使用

float* res = (float*)response.data;