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

生也有涯,知也无涯。这篇文章主要讲述使用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]; }

【使用OpenCV和Android NDK转换数据格式】输出:
nearestNeighbors [0] =0
nearestNeighbors [1] =0
nearestNeighbors [2] = @
答案您可以在其文档中查看返回的函数。例如,看看findNearest
neighborResponses- 对应邻居的可选输出值。它是* k大小的单精度浮点矩阵。
注意单精度浮点数。
这意味着结果是Mat,数据存储为float,这意味着您可以使用它来访问其数据
float* res = (float*)response.data;

    推荐阅读