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&lt;&lt;image_rows_avg[0].size[0]; 给出答案:1

cout&lt;&lt;image_rows_avg[0].size[1]; 给出答案:720 这是正确的,再一次 cout&lt;&lt;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&lt;T&gt; 中超出其范围的元素会导致未定义的行为。您的代码会创建一个空的 std::vector&lt;Mat&gt; 并访问一个不存在的元素。

【讨论】:

+1,但我在等待“哦,但这不是我真正的代码......” 听起来像是 *** 的“我*只是在找朋友……”:D @above 抱歉,您这样评论太早了。

以上是关于vector<Mat> ::size() 神秘地工作的主要内容,如果未能解决你的问题,请参考以下文章

将 Mat 转换为 <vector<vector>> C++

将 vector<Tensor> 输出转换为 vector<Mat> 输出

OpenCV:vector<vector<Point>> 到 vector<Mat> 的转换,引用调用的问题

将 cv::Mat 转换为 vector<int>

将 Vector<float> 中的数据复制到 Vector<Mat> (Opencv/C++)

在 C 中包装 vector<Mat> 时出现分段错误错误