Короткий ответ: вы не должны пытаться обмениваться данными между std::vector
и cv::Mat
, потому что оба берут на себя ответственность за данные, а cv::Mat
могут делиться ими с другими cv::Mat
объектами, и это станет довольно неуправляемым довольнобыстро.
Но cv::Mat
может обмениваться данными с другим cv::Mat
, и вы можете извлечь одну или несколько строк (или столбцов) и получить частичные общие данные с другим cv::Mat
, например:
cv::Mat img;
//.. read the img
//first row
cv::Mat row0 = img(cv::Range(0,1), cv::Range(0,img.cols));
//the 4'th column is shared
cv::Mat column3 = img(cv::Range(0,img.rows), cv::Range(3,4));
//you can set new data into column3/row0 and you'll see it's shared:
//row0.setTo(0);
//column3.setTo(0);
Теперь вы можете создать std::vector<cv::Mat>
, где каждый циновка будет строкой в исходном изображении (и будет делиться данными с исходным изображением), или использовать ее любым удобным для вас способом.