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 graysca
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 <opencv2/core.hpp>
#include <iostream>
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"<<mat1 << "\n\nmat2:\n" << mat2 << std::endl;
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]