当前位置: 首页 > 编程笔记 >

如何将OpenCV Mat对象转换为JavaFX WritableImage?

徐正雅
2023-03-14
本文向大家介绍如何将OpenCV Mat对象转换为JavaFX WritableImage?,包括了如何将OpenCV Mat对象转换为JavaFX WritableImage?的使用技巧和注意事项,需要的朋友参考一下

如果尝试使用OpenCV imread()方法读取图像,它将返回Mat对象。如果要使用JavaFX窗口显示生成的Mat对象的内容,则需要将Mat对象转换为类javafx.scene.image.WritableImage的对象。为此,您需要遵循以下步骤-

  • 将Mat编码为MatOfByte-首先,您需要将矩阵转换为字节矩阵。您可以使用Imgcodecs类的imencode ()方法来完成此操作。

  • 此方法接受String参数(指定图像格式),Mat对象(代表图像),MatOfByte对象。

  • 将MatOfByte对象转换为字节数组-使用方法将MatOfByte对象转换为字节数组toArray()

  • 实例化ByteArrayInputStream- 通过将在上一步中创建的字节数组传递给其构造函数之一来实例化ByteArrayInputStream类。

  • 创建BufferedImage对象-将上一步中创建的Input Stream对象传递给read()ImageIO类的方法。这将返回一个BufferedImage对象。

  • 最后,通过传递在上一步中获得的BufferedImage对象作为参数来调用SwingFXUtils类的toFXImage()方法。

示例

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.imgcodecs.Imgcodecs;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.WritableImage;
public class Mat2WritableImage {
   public static WritableImage Mat2WritableImage(Mat mat) throws IOException{
      //编码图像
      MatOfByte matOfByte = new MatOfByte();
      Imgcodecs.imencode(".jpg", mat, matOfByte);
      //将编码的Mat存储在字节数组中
      byte[] byteArray = matOfByte.toArray();
      //准备缓冲图像
      InputStream in = new ByteArrayInputStream(byteArray);
      BufferedImage bufImage = ImageIO.read(in);
      System.out.println("Image Loaded");
      WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);
      return writableImage;
   }
   public static void main(String args[]) throws Exception {
      //加载OpenCV核心库
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      //从文件中读取图像
      String file = "C:/EXAMPLES/OpenCV/sample.jpg";
      Mat image = Imgcodecs.imread(file);
      WritableImage obj = Mat2WritableImage(image);
      System.out.println(obj);
   }
}

输出结果

Image Loaded
javafx.scene.image.WritableImage@142269f2
 类似资料:
  • 问题内容: 如何将java对象转换为InputStream? 问题答案: 您可以使用ObjectOutputStream 您将对象(以下代码中的obj)写入ObjectOutputStream,要转换为输入流的对象必须实现Serializable。

  • 问题内容: 如何在Java中将对象转换为int? 问题答案: 如果您确定该对象是: 或者,从Java 7开始,您可以等效地编写: 当心,它可以抛出一个,如果你的对象是不是和你要的对象是。 这样,您就假定对象是一个整数(包装的int),然后将其拆箱为一个int。 是基元,因此不能将其存储为,唯一的方法是将考虑/装箱为,然后存储为。 如果您的对象是,则可以使用方法将其转换为简单的int: 如果您的对象

  • 问题内容: 如何将String对象转换为Date对象? 我想我需要做这样的事情: 任何帮助将不胜感激。 问题答案: SimpleDateFormat dateFormat = new SimpleDateFormat(“dd.MM.yyyy”); Date date = dateFormat.parse(“1.1.2001”); 有关详细信息,请参阅: SimpleDateFormat文档

  • 问题内容: 如何将Python对象转换为对象? 我有一个提供第一个库的库,另一个提供了第二个库的库。 问题答案: 使用time.mktime()将时间元组(以当地时间为单位)转换为自大纪元以来的秒数,然后使用datetime.fromtimestamp()获得datetime对象。

  • 问题内容: 我想将org.w3c.dom.Document对象转换为String。我正在使用Java 6,并且愿意使用能够完成任务的任何(完全免费的)技术。我从此线程尝试了解决方案- 在Java中,有比此代码更优雅的方法来将XML文档转换为Java中的String吗?,他们在哪里 但遭到了以下可怕的例外…… 问题答案: 如果您可以进行转换,则可以尝试此操作。

  • 问题内容: response->docs); ?> 输出以下内容: 如何将该对象转换为数组?我想输出以下内容: 这可能吗? 问题答案: 您应该查看get_object_vars,因为您的属性被声明为私有,所以您应该在类内部调用此方法并返回其结果。 注意,对于像字符串这样的原始数据类型,它会很好用,但是我不知道它在嵌套对象中的行为。 在您的情况下,您必须执行类似操作;

  • 问题内容: 我需要加载XML文件并将内容转换为面向对象的Python结构。我要这样: 并将其变成这样: XML数据将具有比这更复杂的结构,并且我无法对元素名称进行硬编码。解析时需要收集属性名称并将其用作对象属性。 如何将XML数据转换为Python对象? 问题答案: 值得一看。 或者以另一种方式构建xml结构: 输出:

  • 我有一个字符串(jsonData)通过Jackson对象映射器映射到json,如下所示,映射到JaxB。 我能够很好地映射到上面的字符串。然而,我在映射到jooq JSON对象时遇到了问题。我想我现在必须将jsonData转换为jooq JSON。 我该怎么做? 或者我必须创建某种包装? 由jooq配置的DTO