opencv获取mat的指针,OpenCV-如何从uint8_t指针创建Mat

I have the following C++ code:

void foo(const uint8_t* data, int height, int width) {

// need to create a cv::Mat from *data, which is a pointer to grayscale image data

// doesn't work correctly (compiles, but array access on the mat leads to a segmentation fault)

auto img = cv::Mat(height, width, CV_8UC1, &data);

// how can I fix the line above to create a proper cv::Mat?

}

// I'm calling foo like this

// img is a grayscale image

foo(img.ptr(0), img.cols, img.rows);

Could anyone point me on what's wrong with my syntax on creating the matrix inside of foo?

解决方案

On this page cv::Mat Class Reference , we can find the cv::Mat construction function as follows:

///! 2017.10.05 09:31:00 CST

/// cv::Mat public construction

Mat ()

Mat (int rows, int cols, int type)

Mat (Size size, int type)

Mat (int rows, int cols, int type, const Scalar &s)

Mat (Size size, int type, const Scalar &s)

Mat (int ndims, const int *sizes, int type)

Mat (int ndims, const int *sizes, int type, const Scalar &s)

Mat (const Mat &m)

Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP)

Mat (Size size, int type, void *data, size_t step=AUTO_STEP)

Mat (int ndims, const int *sizes, int type, void *data, const size_t *steps=0)

Mat (const Mat &m, const Range &rowRange, const Range &colRange=Range::all())

Mat (const Mat &m, const Rect &roi)

Mat (const Mat &m, const Range *ranges)

To create cv::Mat from uint8_t pointer, we can use those two functions:

Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP)

Mat (Size size, int type, void *data, size_t step=AUTO_STEP)

Here is my experiment:

///! 2017.10.05 09:40:33 CST

/// convert uint8_t array/pointer to cv::Mat

#include

#include

int main(){

uint8_t uarr[] = {1,2,3,4,5,6,7,8,9,10,11,12};

int rows = 2;

int cols = 2;

cv::Size sz(cols,rows);

cv::Mat mat1(sz,CV_8UC3, uarr);

cv::Mat mat2(rows, cols, CV_8UC3, uarr);

std::cout<< "mat1: \n"<

return 0;

}

The result is excepted:

mat1:

[ 1, 2, 3, 4, 5, 6;

7, 8, 9, 10, 11, 12]

mat2:

[ 1, 2, 3, 4, 5, 6;

7, 8, 9, 10, 11, 12]

你可能感兴趣的:(opencv获取mat的指针)