BufferedImage против Matofbyte для преобразования матрицы OpenCV в изображение JavafxJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 BufferedImage против Matofbyte для преобразования матрицы OpenCV в изображение Javafx

Сообщение Anonymous »

Я работаю над проектом, который требует некоторой обработки изображений. В какой -то момент мне нужно преобразовать объект opencv < /code> в изображение Javafx, которое будет позже отображено в приложении. < /P>
Для этой цели есть два подхода, которые я нашел. ---> matofbyte ---> bytearrayinputstream и построить изображение из этого Bytearrayinptstream .

[*]

[*] ---> BufferedImage ---> массив байтов и используйте метод Tofximage класса SwingFxutils для возврата изображения.


У меня следующий класс, который расширяет предварительное задание и возвращает класс. Class = "Lang-Java PrettyPrint-Override">import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.WritableRaster;

import javafx.concurrent.Task;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.Image;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

public class MatToFXImage extends Task {
private final Mat mat;

public MatToFXImage(Mat mat) {
if (mat == null)
throw new IllegalArgumentException("Mat object can't be null");

this.mat = mat;
}

private int determineImageType(int matType) {
if (matType == CvType.CV_8UC1)
return BufferedImage.TYPE_BYTE_GRAY;
else if (matType == CvType.CV_8UC3)
return BufferedImage.TYPE_3BYTE_BGR;
else
throw new IllegalArgumentException("Unsupported Mat type: " + matType);
}

@Override
protected Image call() {
// MatOfByte byteMat = new MatOfByte();
// Imgcodecs.imencode(".bmp", mat, byteMat);
// return new Image(new ByteArrayInputStream(byteMat.toArray()));

int type;

type = determineImageType(mat.type());

BufferedImage image = new BufferedImage(mat.width(), mat.height(), type);
WritableRaster raster = image.getRaster();
DataBufferByte dataBuffer = (DataBufferByte) raster.getDataBuffer();

byte[] data = dataBuffer.getData();

mat.get(0, 0, data);
return SwingFXUtils.toFXImage(image, null);
}
}
< /code>
Чтобы сравнить их, я использовал таймер, чтобы измерить время, которое потребовалось каждый метод для завершения. Однако результаты были непоследовательными и варьированными в зависимости от формата изображения, размера и измерений изображения.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... vafx-image
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»