Я нашел некоторое описание форматов "CHW" и "HWC" здесь .
Если порядок хранения HWC, это означает, что
Каждый образец хранится в виде матрицы столбцов (height, width)
из float[numChannels]
(r00, g00, b00, r10, g10, b10, r01, g01, b01, r11, g11, b11)
.
Таким образом, пиксель (x, y, c)
находится с использованием
xStride = channels;
yStride = channels * width;
cStride = 1;
data[x*xStride + y*yStride + c*cStride]
ЕслиПорядок хранения - CHW, это означает, что каждый канал - это отдельная плоскость.Пиксель (x, y, c)
найден с помощью
xStride = 1;
yStride = width;
cStride = width * height;
data[x*xStride + y*yStride + c*cStride]
Обратите внимание, что в указанном коде data[i*ROS_IMAGE_HEIGHT*ROS_IMAGE_WIDTH + j*ROS_IMAGE_HEIGHT + k]
неверно, j
- это координата y и должна быть умножена на ROS_IMAGE_WIDTH
.
Код в вопросе можно изменить, чтобы получить std::vector
в формате HWC, заменив строку в самом внутреннем цикле:
data[i + j*ROS_IMAGE_WIDTH*channels + k*channels] = (float) intensity[i];