Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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!

like image 570
Oliver9523 Avatar asked Nov 06 '12 16:11

Oliver9523


2 Answers

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.

like image 144
ArtemStorozhuk Avatar answered Oct 14 '22 03:10

ArtemStorozhuk


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);
like image 22
AJ_Nur Avatar answered Oct 14 '22 03:10

AJ_Nur