【发布时间】:2012-01-12 17:50:17
【问题描述】:
在 OpenCV 2 及更高版本中,有一个方法 Mat::resize 可以让您向矩阵添加任意数量的具有默认值的行,是否有任何等效的列方法。如果不是,那么最有效的方法是什么。
谢谢
【问题讨论】:
-
我查看了在线文档,您似乎没有添加列的功能。 opencv.willowgarage.com/documentation/cpp/…
标签: c++ visual-c++ opencv
在 OpenCV 2 及更高版本中,有一个方法 Mat::resize 可以让您向矩阵添加任意数量的具有默认值的行,是否有任何等效的列方法。如果不是,那么最有效的方法是什么。
谢谢
【问题讨论】:
标签: c++ visual-c++ opencv
使用cv::hconcat:
Mat mat;
Mat cols;
cv::hconcat(mat, cols, mat);
【讨论】:
vconcat() 和cv::Mat::push_back() 完成垂直连接
最坏情况:rotate the image by 90 degrees 并使用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方法。
【讨论】: