# Revision history [back]

### openCV, conversion between Mat and array by reading from video

Purpose: read all images from a video, image format should be RGB arrays, add overlay to image(for some reason, I have to do the overlay on RGB array), display image. I did some research online, but there is no official or highly up-voted solution.

1. Currently what I do is read image as cv::Mat, then convert Mat to array, can I directly read image as RGB arrays from video?

2. Below is how I convert cv::Mat to RGB arrays, is it correct? Not sure if one row of data is contiguous in memory for cv::Mat? Or is all rowscolumns3 contiguous in memory for cv::Mat? Do you have better solutions?

for (int i = 0; i < Mat_frame; i++) {
memcpy(array_buffer, Mat_frame.ptr(i), Mat_frame.cols * sizeof(uint8_t));
array_buffer += Mat_frame.cols;
}

3. How can I convert RGB arrays back to cv::Mat? Is there a function I can use directly? If not, I can do the reverse of 2 code to convert.

4. About display, cv::waitKey(10), this means giving 10ms for image to display. If I want to display images ASAP, what the minimum value I can set? Or is it really depends on my machine's performance?

### openCV, conversion between Mat and array by reading from video

Purpose: read all images from a video, image format should be RGB arrays, add overlay to image(for some reason, I have to do the overlay on RGB array), display image. I did some research online, but there is no official or highly up-voted solution.

1. Currently what I do is read image as cv::Mat, then convert Mat to array, can I directly read image as RGB arrays from video?

2. Below is how I convert cv::Mat to RGB arrays, is it correct? Not sure if one row of data is contiguous in memory for cv::Mat? Or is all rowscolumns3 contiguous in memory for cv::Mat? Do you have better solutions?

for (int i = 0; i < Mat_frame; i++) {
memcpy(array_buffer, Mat_frame.ptr(i), Mat_frame.cols * sizeof(uint8_t));
sizeof(uint8_t)*3);
array_buffer += Mat_frame.cols;
}

3. How can I convert RGB arrays back to cv::Mat? Is there a function I can use directly? If not, I can do the reverse of 2 code to convert.

4. About display, cv::waitKey(10), this means giving 10ms for image to display. If I want to display images ASAP, what the minimum value I can set? Or is it really depends on my machine's performance?