6

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!

Oliver9523
  • 383
  • 1
  • 4
  • 16

2 Answers2

10

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.

Danilo Gasques
  • 586
  • 5
  • 16
ArtemStorozhuk
  • 8,542
  • 4
  • 30
  • 52
1

maybe you should remove * at

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, *output);

make it just like this:

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, output);
Glorfindel
  • 19,729
  • 13
  • 67
  • 91
AJ_Nur
  • 136
  • 15