If developer want to pre-allocate the memory for some of the cv::Mat, he may do like this:
std::vector<cv::Mat> vecMats(4, cv::Mat::zeros(500, 500, CV_8UC1));
It looks correct at the first glance, but after do some experitent, it shows all the 4 Mat in the vector share the same memory, which means all of 4 images will be the same. Why?
Because above will assign the same temporary Mat object to each of the element, and cv::Mat assignment is a shallow copy, so all all the them share the same memory.
The correct way to initiaze the vector should be like below:
std::vector<cv::Mat> vecMats(4); for (auto& mat : vecMats) mat = cv::Mat::zeros(500, 500, CV_8UC1);
This method can make sure each element in the vector are using different memory.