Search code examples
c++image-processingopencvdouble-pointer

unsigned char ** to opencv mat


I'm almost there but I can't quite understand how to convert

unsigned char ** to a cv::Mat

I know that the .data part of a cv::Mat is uchar*

I'm using a function that returns and image in the form of...

unsigned char ** output;

But the rest of my code uses cv::Mat's. I don't have the source for the lib I'm using either so don't really know what it's doing.

Edit Thanks for the help guys, I've done this...

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, *output);
imshow("this is a test",TempMat);

but the image is black so I now need to find out if there's actually anything there or not.

Sorry for lack of research i'm on a tight deadline, no it's not homework, trying to get something ready to show results to a Professor!


Solution

  • You have to use Mat constructor with a pointer to data:

     // constructor for matrix headers pointing to user-allocated data
        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);
    

    You have to convert void** to void* and after this use it.