Как сгладить 2D матрицу, а затем скопировать ее в определенный столбец в другой матрице в OpenCV? - PullRequest
0 голосов
/ 24 ноября 2018

Например, у меня есть 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;
}

Что я сделал не так с первымрешение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...