cv::Mat_<Type> 分配错误
cv::Mat_<Type> allocation error
我想用自定义类型实例化一个 cv::Mat,但分配似乎失败了。例如:
struct SType
{
int a;
char c[16];
};
cv::Mat m = cv::Mat_<SType>(1, 1);
printf("cols = %i rows %i step = %zi elemSize = %zi elemSize1 = %zin",
m.cols, m.rows, m.step[0], m.elemSize(), m.elemSize1() );
这将提供以下输出:
cols = 1 rows 1 step = 8 elemSize = 8 elemSize1 = 8
这显然是错误的,因为我预计 elemSize 为 20。这是一个错误还是 cv::Mat_ 包装器不应该与自定义元素类型一起使用?
编辑:
将实例分配给 cv::Mat_ 元素时
cv::Mat_<SType> m = cv::Mat_<SType>(1, 1);
printf("cols = %i rows %i step = %zi elemSize = %zi elemSize1 = %zin",
m.cols, m.rows, m.step[0], m.elemSize(), m.elemSize1() );
我得到以下输出:
cols = 1 rows 1 step = 8 elemSize = 20 elemSize1 = 20
现在,elemSize是正确的,但步骤是错误的。据我了解,step 用于通过运算符()(row,col)计算要在矩阵中访问的特定元素,我在这样做时观察到问题。有人对这里发生的事情有更好的了解吗?
编辑 2:
我提交了有关此问题的错误报告。 http://code.opencv.org/issues/4415 .同时,如果有人知道如何处理它,请告诉我。谢谢。
我想
我发现了错误。将变量声明为 cv::Mat。
cv::Mat_<SType> m = cv::Mat_<SType>(1, 1);
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- EASTL矢量<向量<int>>连续的
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ