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

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

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

PS

 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使其更整洁。 如果我发现任何这样的事情,我会更新这个。

Paritosh,你的方法的问题是它只适用于类型为CvType.CV_8UCvType.CV_8S Mats,因为这些Mats可以包含在字节数组中。 如果Mat的类型是CvType.CV_32F ,那么你需要一个float数组来保存数据。 float数组不能被System.arraycopied转换为byte[] targetPixels数组。