2009-10-20 14 views
6

Zastanawiam się, czy istnieje prosty sposób przekonwertowania obrazu tablicy float na iplimage, , który może być obsługiwany przez opencv. Oczywiście mógłbym stworzyć pusty obraz iplimage z tym samym rozmiarem i skopiować tylko piksel z mojego obrazu tablicy float do emplty iplimage, ale jest tam bardziej eleganckie rozwiązanie tego. Być może szybsza metoda mniej zajmująca pamięć, ponieważ obrazy źródłowe są dość duże, a proces kopiowania zajmie trochę czasu.Konwertuj obraz macierzy pływalności do formatu użytego dla opencv

poważaniem,

Zhengtonic

Odpowiedz

3

można zrobić coś takiego (zakładając, pływający 32 bitowy):

float* my_float_image_data; 

CvSize size; 
size.height = height ; 
size.width = width; 
IplImage* ipl_image_p = cvCreateImageHeader(size, IPL_DEPTH_32F, 1); 
ipl_image_p->imageData = my_float_image_data; 
ipl_image_p->imageDataOrigin = ipl_image_p->imageData; 
+0

Dzięki Pal! To powinno się udać. :) – zhengtonic

+0

Dokumentacja OpenCV mówi, że IplImage-> imageData jest typu char. W tym przykładzie jest to tablica float - jak to działa. Zastanawiam się również, czy dane obrazu to tablica 2D czy spłaszczona na 1D? – freakTheMighty

+0

@freakTheMighty Dane są przechowywane w tablicy char, ale co 4 bajty są interpretowane jako jeden float. W C jest to możliwe :). Zobacz http://www.comp.leeds.ac.uk/vision/opencv/iplimage.html dla dobrego opisu. –

1

można wypełnić iplimage strukturę 'ręcznie', aby opisać swoją tablicę następujące komentarzach here.

Obraz pola Data wskaże Twoją oryginalną tablicę.

Ale nie używaj na nim funkcji zwalniania. Po prostu usuń strukturę na końcu.