【问题标题】:cv::Mat_<Type> allocation errorcv::Mat_<Type> 分配错误
【发布时间】:2015-06-23 00:05:56
【问题描述】:

我想用自定义类型实例化一个 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 是错误的。据我了解, step 用于计算要通过 operator() (row,col) 在矩阵中访问的特定元素,这样做时我正在观察问题。有人对这里发生的事情有更好的了解吗?

编辑 2:

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

【问题讨论】:

  • 通常情况下,您必须为您的新类型定义一些 traits (我不认为与您的“混合”结构一起使用)

标签: c++ opencv


【解决方案1】:

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

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

【讨论】:

  • 我的理解是 cv::Mat_ 只是 cv::Mat 的一个包装器,所以它不应该有任何区别。无论如何,我都会尝试一下,如果有什么不同,我会告诉你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多