【发布时间】:2021-09-05 11:54:01
【问题描述】:
OpenCV 读取 NCHW 格式的图像(样本数 x 通道 x 高度 x 宽度),我需要将其转换为 NHWC 格式(将数组的第二维移到最后)。有没有一种有效的方法可以在 C++ 中从 NCHW 转换为 NHWC?我可以用 3 个 for 循环来做到这一点,但显然这根本没有效率。
【问题讨论】:
-
您要分离频道吗?您可以使用 cv::split 后跟连接或使用 cv::blobFromImage。也许还有其他方法可以使用 cvtColor 或更专业的功能。
-
@Micka 不,blobFromImage 以 NCHW 格式创建 blob。在这一点上,我找不到将其转换为 NHWC 的有效方法。我想做的只是用 cv::imread 读取图像,然后自己将其转换为 4d Mat,而不是使用 blobFromImage。我不知道这是否会解决问题,但我会尝试。无论如何,非常感谢您的回复。
-
那么 NCHW 就是 N 个图像的串联。也许你可以将它作为数据指针嵌入到 Mat4d 中
-
此处指定的维度排序不明确。最后一个维度是样本在内存中连续的维度吗?因为 OpenCV 通常会在内存中读取具有连续一个像素的样本的图像。您需要更清楚地了解如何重新组织数据的内存布局。
-
另外,为什么你说循环效率不高?除了循环之外,您无法复制数据。甚至像
memcpy这样的系统调用也会循环数据。
标签: c++ opencv image-processing