bytedeco/javacv

I'm passing a Frame to a BufferedImage to get a Array of each RGB channel - is there a more direct path?

Open

#2.097 geöffnet am 14. Sept. 2023

Auf GitHub ansehen
 (1 Kommentar) (0 Reaktionen) (0 zugewiesene Personen)Java (1.583 Forks)batch import
help wantedquestion

Repository-Metriken

Stars
 (6.985 Stars)
PR-Merge-Metriken
 (Keine gemergten PRs in 30 T)

Beschreibung

I feel like I'm converting when I don't need to be, and that there is likely a much more direct path.

Input: A short lived org.bytedeco.javacv.Frame read from a FFmpegFrameGrabber.

Output: the image fully decoded and normalized in a very basic format of:

class DecodedImage(
    internal val width: Int,
    internal val height: Int,
    private val red: IntArray = IntArray(width * height),
    private val green: IntArray = IntArray(width * height),
    private val blue: IntArray = IntArray(width * height),
)

Ints per channel per pixel are a lot, but I need them for some later summing.

Right now I'm using a Java2DFrameConverter to convert the Frame to a BufferedImage, then reading out pixels from the BufferedImage -> Raster -> dataBuffer.

That seems... excessive. Is there a more direct way of blowing out a Frame to a fully flattened DecodedImage? I poked around in the Java2DFrameConverter, and it handles a lot of image formats.

Contributor Guide