我正在尝试查看从 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
neighborResponses – Optional output values for corresponding neighbors. It is a single-precision floating-point matrix of * k size.
注意单精度 float 。
这意味着结果是 Mat,数据存储为 float,这意味着您可以访问其数据
float* res = (float*)response.data;
关于android - 使用带有 Android NDK 的 OpenCV 转换数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48007877/