opencv cnn 模块 detection 返回的四维数组在mat中 但是mat本身是个二维数组
时间: 2023-11-27 12:52:19 浏览: 62
c++return返回二维数组
3星 · 编辑精心推荐
在 OpenCV 的 C++ 接口中,CNN 模块的 detection 函数返回的是一个四维数组(通常是 BatchSize x NumClasses x MaxNumDetections x 7),其中第一个维度表示批处理大小,第二个维度表示类别数,第三个维度表示每张图像最多检测到的目标数,第四个维度表示检测到的目标的属性信息。但是,OpenCV 的 Mat 类型是一个二维数组,因此需要将四维数组转换为 Mat 类型才能进行后续的操作。
具体的转换方法如下:
```c++
// 假设 detection 函数返回的四维数组为 detections
cv::Mat detectionsMat(detections.size[0] * detections.size[2], 7, CV_32F);
for (int i = 0; i < detections.size[0]; ++i) {
for (int j = 0; j < detections.size[2]; ++j) {
for (int k = 0; k < 7; ++k) {
detectionsMat.at<float>(i * detections.size[2] + j, k) = detections.at<float>(i, 0, j, k);
}
}
}
```
这里使用了一个大小为 BatchSize x MaxNumDetections x 7 的 Mat 类型 detectionsMat 来存储四维数组 detections。首先使用三重循环将 detections 中的数据复制到 detectionsMat 中。在 detectionsMat 中,第一维度表示批处理中所有图像的所有检测结果,第二维度表示每个检测结果的属性信息。
阅读全文