cv :: Mat_ <type>分配错误

时间:2015-06-15 16:29:54

标签: c++ opencv

我想用自定义类型实例化一个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 = %zi\n",
       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 = %zi\n",
       m.cols, m.rows, m.step[0], m.elemSize(), m.elemSize1() );

我得到以下输出:

cols = 1 rows 1 step = 8 elemSize = 20 elemSize1 = 20

现在,elemSize是正确的,但步骤是错误的。据我所知,step用于通过operator()(row,col)计算要在矩阵中访问的特定元素,并且在这样做时我会观察问题。任何人都能更好地了解这里发生了什么?

编辑2:

我提交了有关此问题的错误报告。 http://code.opencv.org/issues/4415。在此期间,如果有人知道如何处理它,请告诉我。感谢。

1 个答案:

答案 0 :(得分:0)

我想我发现了这个错误。您将变量声明为cv :: Mat。尝试:

cv::Mat_<SType> m = cv::Mat_<SType>(1, 1);