Slicing operation help

you don’t have to, it happens ‘in-place’:

const int sz[] = {3,8,8,5}; // slightly smaller for viz.
cv::Mat input_array(4,sz,CV_32F,cv::Scalar(1.0));
std::vector<cv::Range> ranges;
  ranges.push_back(cv::Range::all());
  ranges.push_back(cv::Range::all());
  ranges.push_back(cv::Range::all());
  ranges.push_back(cv::Range(0, 2));

cv::Mat subarray = input_array(ranges);
cout << subarray.size << endl;
subarray = subarray * 2; // some op
cout << Mat(8,8,CV_32F,input_array.ptr(0));

3 x 8 x 8 x 2
[2, 2, 1, 1, 1, 2, 2, 1;
 1, 1, 2, 2, 1, 1, 1, 2;
 2, 1, 1, 1, 2, 2, 1, 1;
 1, 2, 2, 1, 1, 1, 2, 2;
 1, 1, 1, 2, 2, 1, 1, 1;
 2, 2, 1, 1, 1, 2, 2, 1;
 1, 1, 2, 2, 1, 1, 1, 2;
 2, 1, 1, 1, 2, 2, 1, 1]