opencv 3.0 Mat 不提供下标运算符

opencv 3.0 Mat not provide a subscript operator

我目前正在 Xcode 7.2 中使用 Opencv 3.0 C++。我写了代码错误

Variable length array of non-POD element type cv::Mat

示例代码定义如下

Mat symbol[opts.numofblocksX*opts.numofblocksY];

我已将代码更改为

Mat symbol = symbol[opts.numofblocksX * opts.numofblocksY];

它显示另一个错误

cv::Mat doest not provide a subscript operator

有没有人遇到过同样的问题?我可以在这里实施的解决方案是什么?

谢谢

此代码:

cv::Mat symbol[opts.numofblocksX*opts.numofblocksY];

定义 Mat 个大小为 opts.numofblocksX*opts.numofblocksY 的数组。

你得到的错误是因为这个数组的大小在编译时不是固定的,这不是 POD type

您的新代码有缺陷。

cv::Mat symbol = symbol[opts.numofblocksX * opts.numofblocksY];

这定义了一个单独的 Mat 调用符号,然后无意义地尝试以 opts.numofblocksX * opts.numofblocksY 作为参数对其调用 operator[]。这不是声明数组。

有两个明显的选择:

  • 在允许可变大小分配的 heap 上分配您的数组。别忘了稍后delete[]! (或使用智能指针)

    cv::Mat *symbol = new cv::Mat[opts.numofblocksX * opts.numofblocksY];

  • 使用std::vector(推荐):

    std::vector<cv::Mat> symbols(opts.numofblocksX * opts.numofblocksY]);