【问题标题】:OpenCV Add columns to a matrixOpenCV 将列添加到矩阵
【发布时间】:2012-01-12 17:50:17
【问题描述】:

在 OpenCV 2 及更高版本中,有一个方法 Mat::resize 可以让您向矩阵添加任意数量的具有默认值的行,是否有任何等效的列方法。如果不是,那么最有效的方法是什么。 谢谢

【问题讨论】:

标签: c++ visual-c++ opencv


【解决方案1】:

使用cv::hconcat:

Mat mat;
Mat cols;

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

【讨论】:

【解决方案2】:

最坏情况:rotate the image by 90 degrees 并使用Mat::resize(),使列变为行。

【讨论】:

  • 好的,但这是最坏的情况,如果我的 Mat 包含 CV_64FC1 并且尺寸太大(500 * 500)并且我必须为大量矩阵使用这个,所以我不想要在算法中包含旋转或转置两次如此大的矩阵的过程。
  • 正如我所说,最坏的情况。如果我知道最好的案例,我会与您分享。
【解决方案3】:

自 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方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2017-06-15
    • 2014-07-06
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    相关资源
    最近更新 更多