OpenCV добавление столбцов в матрицу

в OpenCV 2 и позже есть метод Mat::resize что давайте добавим любое количество строк со значением по умолчанию в вашу матрицу, есть ли эквивалентный метод для столбца. и если нет, то каков наиболее эффективный способ сделать это. Спасибо

3 ответов


использовать cv::hconcat:

Mat mat;
Mat cols;

cv::hconcat(mat, cols, mat);

худший сценарий: повернуть изображение на 90 градусов и использовать Mat::resize(), превращая столбцы в строки.


поскольку OpenCV хранит элементы строк матрицы последовательно один за другим, нет прямого метода увеличения размера столбца, но я привожу два решения для вышеуказанного вопроса, Сначала, используя следующий метод (порядок копирования элементов меньше, чем другие методы), также вы можете использовать аналогичный метод, если хотите вставить некоторые строки или столбцы не специально в конце матриц.

void resizeCol(Mat& m, size_t sz, const Scalar& s)
{
    Mat tm(m.rows, m.cols + sz, m.type());
    tm.setTo(s);
    m.copyTo(tm(Rect(Point(0, 0), m.size())));
    m = tm;
}

и другой, если вы настаиваете не включать даже копирование порядка данных в ваши алгоритмы, то лучше создать матрицу с большим количеством строк и столбцов и запустить алгоритм с меньшей подматрицей, а затем увеличить размер матрицы на Mat::adjustROI метод.