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?
1 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.
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].