Accessing a matrix element in the "Mat" object (not the CvMat object) in OpenCV C++


How to access elements by row, col in OpenCV 2.0's new "Mat" class? The documentation is linked below, but I have not been able to make any sense of it.

7/28/2017 5:05:50 AM

Accepted Answer

On the documentation:

It says:

(...) if you know the matrix element type, e.g. it is float, then you can use at<>() method

That is, you can use:

Mat M(100, 100, CV_64F);
cout <<<double>(0,0);

Maybe it is easier to use the Mat_ class. It is a template wrapper for Mat. Mat_ has the operator() overloaded in order to access the elements.

5/11/2016 8:24:26 AM

The ideas provided above are good. For fast access (in case you would like to make a real time application) you could try the following:

//suppose you read an image from a file that is gray scale
Mat image = imread("Your path", CV_8UC1);
// some processing
uint8_t *myData =;
int width = image.cols;
int height = image.rows;
int _stride = image.step;//in case cols != strides
for(int i = 0; i < height; i++)
    for(int j = 0; j < width; j++)
        uint8_t val = myData[ i * _stride + j];
        //do whatever you want with your value

Pointer access is much faster than the<> accessing. Hope it helps!

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow