Slicing operation help

Dear sycc,

subarray is effectively a view of input_array.
I haven’t debugged your code, but check out the example below (it’s an image and not a general multi-dimensional array because it makes visualization easier):

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <vector>

int main() {
    cv::Mat input_array(80, 80, CV_8UC3, cv::Scalar(255,0,0)); //3 channels, 80x80, completely blue
   
    cv::imshow("", input_array);
    cv::waitKey(0);

    std::vector<cv::Range> ranges;
    ranges.push_back(cv::Range::all());
    ranges.push_back(cv::Range(0, 20));

    cv::Mat subarray = input_array(ranges); //subarray is a view of the first 20 columns of the image
    subarray = cv::Scalar(0, 255, 0); //change the color to green
    cv::imshow("", input_array);
    cv::waitKey(0);

    subarray = subarray / 2; //halven the intensity of the green
    cv::imshow("", input_array);
    cv::waitKey(0);

    return 0;
}