2012-11-06 13 views
5

jestem prawie tam, ale nie mogę zupełnie zrozumieć, w jaki sposób przekonwertowaćunsigned char ** do OpenCV matę

unsigned char ** to a cv::Mat 

wiem, że .data częścią cv :: Mat to uchar *

Używam funkcję zwracającą i obrazu w formie ...

unsigned char ** output; 

Ale reszta mojego kodu używa cv :: Mat-tych. Nie mam źródła dla biblioteki, której używam, więc tak naprawdę nie wiem, co robi.

Edit Dzięki za pomoc chłopaki, zrobiłem to ...

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

ale obraz jest czarny, więc teraz trzeba dowiedzieć się, czy rzeczywiście coś tam, czy nie.

Przepraszam za brak badań, jestem w ścisłym terminie, nie jest to praca domowa, staram się przygotować coś do pokazania wyników profesorowi!

+2

Czy wiesz, szerokość i wysokość podwójnego wskaźnika jesteś powracającego? – sgarizvi

Odpowiedz

8

Musisz użyć Mat constructor ze wskaźnikiem do danych:

// 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); 

trzeba konwertować do void*void** a potem użyj go.

+0

Dzięki, zrobiłem to. Zobacz temat edycji następnego problemu. – Oliver9523

+1

@ Oliver9523 jaki jest format danych wejściowych ('void **')? Jeśli jest to wskaźnik do dwuwymiarowej tablicy danych obrazu, powinieneś przekonwertować go na jednowymiarowy. – ArtemStorozhuk

+0

Zakładam, że to tablica 2d, dzięki. Popatrzę na konwersję. – Oliver9523

0

może należy usunąć * na

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

czynią to po prostu tak:

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, output); 
Powiązane problemy