vector<Mat> ::size() 神秘地工作
Posted
技术标签:
【中文标题】vector<Mat> ::size() 神秘地工作【英文标题】:vector<Mat> ::size() working misteriously 【发布时间】:2014-01-06 07:09:06 【问题描述】:我有一个 Mat 类型的向量,大小为 1 x 720 x 3 ,即一行,720 列和 3 个通道。我检查了以下尺寸
vector<Mat> image_rows_avg;
cout<<image_rows_avg[0].size;
它给出了一些值,例如 0x918840。可能这个.size()
给出了一些地址。所以我试着做
cout<<image_rows_avg[0].size[0];
给出答案:1
cout<<image_rows_avg[0].size[1];
给出答案:720
这是正确的,再一次
cout<<image_rows_avg[0].size[2];
给出答案:159187328
又是垃圾。
我无法理解这是怎么回事。我认为.size()
应该直接给出向量的大小。
【问题讨论】:
image_rows_avg.size()
将为您提供向量的大小,image_rows_avg[X].size()
将为您提供向量中X
元素的相应size()
。
image_rows_avg
为空,因此您访问的范围越界。
它不是空的,它里面有正确的值。只是我没有在cout之前发布代码的中间部分
此外,请注意我已经提到 size(0) 给出了 1,它不是。 of rows and size(1) 给出正确的列数。
【参考方案1】:
访问std::vector<T>
中超出其范围的元素会导致未定义的行为。您的代码会创建一个空的 std::vector<Mat>
并访问一个不存在的元素。
【讨论】:
+1,但我在等待“哦,但这不是我真正的代码......” 听起来像是 *** 的“我*只是在找朋友……”:D @above 抱歉,您这样评论太早了。以上是关于vector<Mat> ::size() 神秘地工作的主要内容,如果未能解决你的问题,请参考以下文章
将 Mat 转换为 <vector<vector>> C++
将 vector<Tensor> 输出转换为 vector<Mat> 输出
OpenCV:vector<vector<Point>> 到 vector<Mat> 的转换,引用调用的问题