public static Image toJFXImage(UMat mat) {
// JavaFX native format is BGRA so let's convert on GPU UMat bgraMat = new UMat(); cvtColor(mat, bgraMat, COLOR_BGR2BGRA); var w = bgraMat.cols(); var h = bgraMat.rows(); var channels = 4; var imageArray = new byte[w * h * channels];
// Get regular Mat from UMat so that we can access memory.
// Couldn't figure out a way to do it otherwise.
// Wrap in try-resource block because tempMat needs to be closed
// otherwise we crash during GC. try (Mat tempMat = bgraMat.getMat(ACCESS_READ)) { tempMat.data().get(imageArray); } var buffer = new PixelBuffer<ByteBuffer>(w, h, ByteBuffer.wrap(imageArray), PixelFormat.getByteBgraPreInstance()); return new WritableImage(buffer); }
public class VideoUtils {
public static Image toJFXImage(UMat mat) {
UMat bgraMat = new UMat(); cvtColor(mat, bgraMat, COLOR_BGR2BGRA); var w = bgraMat.cols(); var h = bgraMat.rows();
try (Mat tempMat = bgraMat.getMat(ACCESS_READ)) {
var pixelBuf = new PixelBuffer<ByteBuffer>(w, h, tempMat.createBuffer(), PixelFormat.getByteBgraPreInstance()); return new WritableImage(pixelBuf); } }}
--
---
You received this message because you are subscribed to the Google Groups "javacv" group.
To unsubscribe from this group and stop receiving emails from it, send an email to javacv+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/javacv/5ea6e4a6-2551-4cba-8688-9383f7c18305o%40googlegroups.com.
It gets copied. Mat can't hold data on GPUs.
2020年6月23日(火) 14:59 Benjamin Xiao <ben....@gmail.com>:
To unsubscribe from this group and stop receiving emails from it, send an email to jav...@googlegroups.com.
try (Mat tempMat = bgraMat.getMat(ACCESS_READ)) { var pixelBuf = new PixelBuffer<ByteBuffer>(w, h, tempMat.createBuffer(), PixelFormat.getByteBgraPreInstance()); return new WritableImage(pixelBuf); }
public static Image toJFXImage(UMat mat) { UMat bgraMat = new UMat(); cvtColor(mat, bgraMat, COLOR_BGR2BGRA);
Mat tempMat = new Mat(); bgraMat.copyTo(tempMat);
// The buffer behind tempMat.createBuffer() is probably freed when tempMat gets GC'ed. var pixelBuf = new PixelBuffer<ByteBuffer>(tempMat.cols(), tempMat.rows(), tempMat.createBuffer(), PixelFormat.getByteBgraPreInstance()); return new WritableImage(pixelBuf); }
public static Image toJFXImage(UMat mat) { UMat bgraMat = new UMat(); cvtColor(mat, bgraMat, COLOR_BGR2BGRA); var w = bgraMat.cols(); var h = bgraMat.rows();
var ch = bgraMat.channels();
ByteBuffer buf = ByteBuffer.allocate(w * h * ch); buf.put(bgraMat.asByteBuffer()); var pixelBuf = new PixelBuffer<ByteBuffer>(w, h, buf, PixelFormat.getByteBgraPreInstance()); return new WritableImage(pixelBuf); }