mat ---> matofbyte ---> bytearrayinptstream и построить изображение из этого Bytearrayinptstream. < /p>
< /blockquote>
second apporach-это < /p>
mate-raste-stytes-> < /p>
. Tofximage класса Swingfxutils для возврата изображения.
У меня есть следующий класс , который расширяет класс задачи и возвращает преобразованное изображение.
Код: Выделить всё
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);
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... vafx-image
Мобильная версия