java - 如何将mat(OpenCV)转换为图像(JavaFX)?

标签 java opencv javafx

如何将 mat(OpenCV) 转换为 image(JavaFX)? 我认为这不是最好的方法:

MatOfByte byteMat = new MatOfByte();
Highgui.imencode(".bmp", mat, byteMat);
return new Image(new ByteArrayInputStream(byteMat.toArray()));

附注

Image - import javafx.scene.image.Image;

最佳答案

一种方法是这样。我不记得我得到这个的来源:-

private Image mat2Image(Mat frame)
{
    int type = BufferedImage.TYPE_BYTE_GRAY;
    if ( frame.channels() > 1 ) {
        type = BufferedImage.TYPE_3BYTE_BGR;
    }
    int bufferSize = frame.channels()*frame.cols()*frame.rows();
    byte [] b = new byte[bufferSize];
    frame.get(0,0,b); // get all the pixels
    BufferedImage image = new BufferedImage(frame.cols(),frame.rows(), type);
    final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
    System.arraycopy(b, 0, targetPixels, 0, b.length);
    return SwingFXUtils.toFXImage(image,null);

}

可能有一种方法可以使用 Opencv 中的 Converters 类和 JDK8 使其​​变得更简洁。如果我发现任何这样的事情,我会更新。

关于java - 如何将mat(OpenCV)转换为图像(JavaFX)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29120869/

相关文章:

python - 在执行下面的代码时,我得到了这个 'TypeError: img is not a numerical tuple'

java - 如何禁用子像素渲染?

java - 为什么数据报套接字缓冲区大时,丢弃率高

Java 排序用户定义的对象

java - 某些设备中的 SimpleDateFormat ParseException

c++ - FeatureDetector OpenCV 2.4.5 中的访问违规读取

java - JSP 页面缓存旧 session 的信息

java - 如何使用 3d-to-2d-point-correspondences 估计相机姿势(使用 opencv)

JavaFX 窗口在左上角打开然后跳到中心

java - fxml - 隐藏控件仍然在工具栏中保留一席之地