OpenCV - how to create Mat from uint8_t pointer

后端 未结 1 1512
有刺的猬
有刺的猬 2021-01-12 08:04

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         


        
相关标签:
1条回答
  • 2021-01-12 08:50

    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]
    
    0 讨论(0)
提交回复
热议问题