转换时注意四点:
- ncnn中的数据是float类型.
- imageDate的类型是CV_8UC3, mat.data指定的类型是char *型, 故imageDate可以用下标[]直接索引.
- ncnn中数据的排列格式为(channel, h, w), cv::Mat中数据的排列格式为(h, w, channel).
- 需注意ncnn, cv::Mat通道顺序
void ncnn_debug(ncnn::Mat& ncnn_img, string img_name)
{
cv::Mat imageDate(ncnn_img.h, ncnn_img.w, CV_8UC3);
for (int c = 0; c < 3; c++) {
for (int i = 0; i < ncnn_img.h; i++)
{
for (int j = 0; j < ncnn_img.w; j++)
{
float t = ((float*)ncnn_img.data)[j + i * ncnn_img.w + c * ncnn_img.h * ncnn_img.w];
imageDate.data[(2 - c) + j * 3 + i * ncnn_img.w * 3] = t;
}
}
}
cv::imwrite("C:\\Users\\admin\\Desktop\\" + img_name, imageDate);
}