在OpenCV中向矩阵添加一行

18

这是一个非常简单的问题,但我在Google或OpenCV文档中找不到答案。如何将一个向量或默认数字插入到cv::Mat底部的一行?我尝试了:

std::vector<double> v = {0, 0, 1};
m.push_back(v);

代码可以编译,但总是出现断言错误。正确的做法是什么?


请展示一下Mat的样子。是的,你可以用这种方式插入一行,但你插入的内容必须看起来像一行实际的数据。 - berak
这个 Mat 看起来像这样:[8.4-312,2.1e-314,2.1e-314;4294967296.0,-2.3e+77,2.8e-269]。真的可以使用 std::vector 吗? - Neptilo
1个回答

46
添加的元素必须是一个与容器矩阵列数相同的Mat

添加的元素必须是一个与容器矩阵列数相同的Mat

cv::Mat m = cv::Mat::ones(4, 3, CV_64F);    // 3 cols, 4 rows
cv::Mat row = cv::Mat::ones(1, 3, CV_64F);  // 3 cols, 1 row
m.push_back(row);                           // 3 cols, 5 rows

谢谢,它有效。但我想知道为什么文档说“[Mat::push_back方法]模拟了STL向量类的相应方法”。 - Neptilo
我猜这是因为你可以在矩阵的末尾添加和删除(pop_back)元素,这些元素是行而不是单个值,就像向量一样。 - ChronoTrigger
好的,这意味着 cv::Mat 具有类似于 STL 向量的函数,但不使用 STL 向量作为参数。在我看来,OpenCV文档应该更加明确。好的,谢谢! - Neptilo
如果添加一列,两个 cv::Mat 的行数仍然相同,它是否仍然能够正常工作? - masad
如果我们想要将整个矩阵附加在另一个矩阵的底部,该怎么办? - pranav shukla
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接