在OpenCV 2及更高版本中,方法Mat::resize
允许您向矩阵添加具有默认值的任意数量的行是否有任何等效的列方法。如果不是,最有效的方法是什么。
感谢
答案 0 :(得分:26)
使用cv::hconcat
:
Mat mat;
Mat cols;
cv::hconcat(mat, cols, mat);
答案 1 :(得分:3)
最糟糕的情况:rotate the image by 90 degrees并使用Mat::resize()
,使列成为行。
答案 2 :(得分:2)
由于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
方法。