Например, у меня есть 2D-матрица с 3 каналами:
const auto img = imread("path.jpg", IMREAD_COLOR);
const auto ROWS = img.rows;
const auto COLS = img.cols;
А затем я делю ее на вектор, чтобы получить 2D-матрицу с 1-каналом:
std::vector<Mat> channels{};
split(img, channels);
Я хочу сохранить каналы в виде матрицы размера [ROWS COLS, 3], поэтому я попытался это сделать.Я думал, что это должно сгладить каждую Матрицу в каналах выше в Матрицу размера [ROWS COLS, 1], а затем скопировать ее в определенный столбец в результате , но это было неправильно:
Mat result(ROWS*COLS, 3, CV_32F);
auto i = 0;
for(const auto& channel : channels) {
channel.reshape(0, ROWS*COLS).copyTo(result.col(i));
++i;
}
Я использовал наивный способ, который дает правильный результат :
for (const auto& channel : channels) {
for (auto y = 0; y < rows; ++y)
for (auto x = 0; x < cols; ++x) {
result.at<float>(y + x * rows, i) = channel.at<uchar>(y, x);
}
++i;
}
Что я сделал не так с первымрешение?