列异常的 Img 矩阵迭代器<T>
Img MatIterator<T> of column exception
我想为我的openCV应用程序使用一些STL算法。现在,我想镜像 img。我想颠倒行,列和两行的顺序。当我输入:
// Horizontal and vertical mirror
MatIterator_<cv::Vec3b> it = img.begin<cv::Vec3b>();
MatIterator_<cv::Vec3b> end = img.end<cv::Vec3b>();
std::reverse(it, end);
它就像一个魅力。
但是当我尝试遍历单列或单行时
MatIterator_<cv::Vec3b> it = img.col(0).begin<cv::Vec3b>();
MatIterator_<cv::Vec3b> end = img.col(0).end<cv::Vec3b>();
std::reverse(it, end);
我从调用 std::反向时收到异常:
OpenCV(4.1.1) Error: Assertion failed (i >= 0) in cv::MatSize::operator [], file C:buildmaster_winpack-build-win64-vc14opencvmodulescoreincludeopencv2/core/mat.inl.hpp, line 1465
OpenCV(4.1.1) C:buildmaster_winpack-build-win64-vc14opencvmodulescoreincludeopencv2/core/mat.inl.hpp:1465: error: (-215:Assertion failed) i >= 0 in function 'cv::MatSize::operator []'
Mat::col(int number( 返回尺寸为 [img height x 1] 的 Mat obj.,那么为什么会出现这样的错误呢?同样的情况也发生在 Mat::row...
我认为您正在处理一个悬而未决的参考问题,来自col()
引用的row()
文档
为指定的矩阵行创建矩阵标头。
该方法为指定的矩阵行创建一个新标头并返回 它。
文档强调col()
或row()
与原始矩阵共享数据,因此没有缓冲区的副本,但您仍然需要Mat
对象对象才能知道其他信息,例如维度。逐步解决调试器的问题,我可以看到它崩溃了,因为它指向的矩阵的维度0
。它指向的矩阵是第一行之后已停止存在的col()
返回的矩阵。您可以修复代码,确保列矩阵一直存在,直到不再需要它:
auto col = img.col(0);
cv::MatIterator_<cv::Vec3b> it = col.begin<cv::Vec3b>();
cv::MatIterator_<cv::Vec3b> end = col.end<cv::Vec3b>();
std::reverse(it, end);
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中