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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用OpenCV和Android NDK转换数据格式相关的知识,希望对你有一定的参考价值。

我试图查看从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];
}

输出:

nearestNeighbors [0] = 1077936128

nearestNeighbors [1] = 1077936128

nearestNeighbors [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];
}

输出:

nearestNeighbors [0] = 0

nearestNeighbors [1] = 0

nearestNeighbors [2] = @

答案

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

neighborResponses - 对应邻居的可选输出值。它是* k大小的单精度浮点矩阵。

注意单精度浮点数。

这意味着结果是Mat,数据存储为float,这意味着您可以使用它来访问其数据

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

以上是关于使用OpenCV和Android NDK转换数据格式的主要内容,如果未能解决你的问题,请参考以下文章

将啥传递给 Android 的 NDK 以便可以使用 OpenCV 加载图像?

Android Studio、Gradle、OpenCV 和 NDK

JNI、NDK 和 OpenCV

Ubuntu+IntelliJ IDEA+Android 配置NDK环境+openCV

如何在 Android NDK 中使用 OpenCV BOWImgDescriptorExtractor?

如何在带有 opencv 的 NDK 中使用 meanshift?