我正在尝试创建一个Mat对象数组来存储图像,并且在使用除静态类型数字之外的其他任何内容时都会收到警告,例如10
int numberOfRects = boundRect.size();
Mat image_array[numberOfRects];
当我尝试这段代码时,我收到一条错误,指出非POD元素类型的可变长度数组&#c; cv :: Mat'
此代码也是如此:Mat image_array[boundRect.size()];
如何根据boundRect的大小创建一个Mats数组?
答案 0 :(得分:2)
您需要创建一个动态数组。这是学习语言的一个基本但非简单的方面,所以我建议你先学习一些简单的例子。
您可以像这样创建
Mat *image_array = new Mat[numberOfRects];
但必须在完成后删除它,否则会有内存泄漏。
delete[] image_array;
更好的选择是使用std::vector
,它会自动删除其内容。但是一个类必须是可复制的才能在其中使用,我不知道你的Mat
类允许什么。它看起来像
std::vector<Mat> image_array(numberOfRects);
如果无法复制Mat
,则正确的C ++ 11解决方案是使用智能指针向量。
std::vector<std::unique_ptr<Mat>> image_array(numberOfRects);
for (auto& mat : image_array)
{
mat = std::make_unique<Mat>();
}