Mam program Java, który musi utworzyć OpenCV 2D Mat typu 16UC1 z tablicy bajtów 1D (znana jest szerokość i wysokość). Rozmiar tablicy bajtów to W * H * 2, a każdy piksel powinien być zbudowany z dwóch kolejnych bajtów z tablicy.

W C ++ OpenCV jest to trochę trywialne, ponieważ konstruktor Mat może wziąć (void *) wskaźnik do danych, ale czy mogę to zrobić w java OpenCV bez zagnieżdżonych pętli i konstruowania każdego uint16 z dwóch bajtów?

0
Osman-pasha 20 listopad 2019, 14:51

1 odpowiedź

Najlepsza odpowiedź

Skończyło się na konwersji bajtów java [] na krótkie [] za pośrednictwem java.nio ByteBuffer i ShortBuffer.

byte v[] = {0,0, 1,0, -1,0,     0,1,    1,1,   -1,1,    0,-1,  1,-1,  -1,-1 };
short s[] = new short[v.length/2];
ByteBuffer.wrap(v).asShortBuffer().get(s);
Mat m = new Mat(3,3, CvType.CV_16UC1);
m.put(0, 0, s);

Wciąż jednak poszukuję rozwiązania natywnego dla OpenCV.

0
Osman-pasha 21 listopad 2019, 11:18