Как инициализировать массив 10 матами? Я пробовал: (он работает в функции, но не в классе)
cv::Mat outIm[10];
for(int i=0; i<10; i++)
outIm[i] = Mat(rows, cols, CV_8UC3, cv::Scalar(0,0,0));
Есть ли что-то вроде ниже законного?
cv::Mat im[10](rows, cols, CV_8UC3); //not working
Спасибо @Мансур. Ваша идея хорошо работает в функции, но все же не работает в классе (если я не ошибаюсь). Нет ли способа инициализировать в классе. Как вы думаете!
Я не понимаю, что вы имеете в виду под в классе? Если бы outIM
был членом класса, вы могли бы вызвать std::array::fill
внутри конструкторов? Или вы можете создать статическую функцию-член, которая возвращает инициализированные массивы, и использовать По умолчаниюинициализаторы в своем классе.
Ах хорошо, я не был знаком с конструктором. Позвольте мне исследовать это. Между тем, если вы можете преобразовать свой комментарий в ответ, я могу его принять.
Это одно из возможных решений:
class Foo
{
// Function which returns a zero initialised cv::Mat
static std:array<cv::Mat,10> MakeInitMatArray() {return {cv::Mat(rows, cols, CV_8UC3, cv::Scalar(0,0,0))};}
// In-class default-initializer
std:array<cv::Mat,10> outIm = MakeInitMatArray();
// ... rest of Foo class
};
Сделайте
std::array
и используйте методfill
, например:std::array<cv::Mat, 10> outIM; outIM.fill(cv::Mat(rows, cols, CV_8UC3, cv::Scalar(0,0,0)))
.