OpenCV将列添加到矩阵中

OpenCV Add columns to a matrix

本文关键字:添加 OpenCV      更新时间:2023-10-16

在OpenCV 2和更高版本中,有一种方法Mat::resize,可以将任意数量的具有默认值的行添加到矩阵中。对于列,是否有任何等效的方法。如果没有,最有效的方法是什么。感谢

使用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方法增加矩阵大小。