You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenCV中使用push_back处理Mat?向量传入失败求助

解决OpenCV中Mat.push_back()传入vector失败的问题

嘿,我来帮你捋清楚这个问题!首先你提到的直接传入Mat对象的写法确实完全没问题:

Mat mat = (Mat_<uchar>(2, 4) << 5, 6, 0, 4, 0, 1, 9, 9);
Mat mat2 = (Mat_<uchar>(2, 4) << 5, 77, 0, 4, 2, 3, 9, 6);
// 运行成功
mat.push_back(mat2);

但为什么传入vector<vector<uchar>>会失败呢?其实是你对push_back的重载理解有点小偏差——它支持的是传入单个行向量(也就是vector<T>类型,对应Mat的一行数据),而不是二维的vector<vector<T>>(这相当于多行数据)。

正确的使用方式

1. 添加单行vector

如果只是要给Mat添加一行,直接传vector<uchar>就行,比如:

vector<uchar> single_row = {5, 77, 0, 4};
mat.push_back(single_row); // 这个能正常编译运行

2. 添加多行vector

如果是像你那样的二维vector(多行数据),需要先把它转换成Mat对象,再调用push_back:

vector<vector<uchar>> v1 = { { 5, 77, 0, 4 },{ 2, 3, 9, 6 } };
// 把二维vector转成Mat,第二个参数true表示不复制数据(可选,按需选择)
Mat mat_from_vec(v1, true);
mat.push_back(mat_from_vec);

这样就能成功把多行数据添加到原Mat里了。本质上是因为push_back对于vector的重载只接受单行数据,多行的话必须先转成Mat,让它匹配到接受Mat对象的重载版本。

内容的提问来源于stack exchange,提问作者tem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:48:10