问题的大部分实现"如何将Mat转换为BufferedImage / java.fx.scene.image.Image"涉及将源Mat存储在像mat.get(row, col, sourceByteArray)
这样的字节数组中,然后将sourceByteArray数组复制到图像栅格的字节数组中:
final byte[] destinationByteArray = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
System.arraycopy(sourceByteArray, 0, destinationByteArray, 0, sourceByteArray.length);
或直接进入bufferedImage的栅格数据元素:
BufferedImage bufferedImage = new BufferedImage(cols, rows, type);
bufferedImage.getRaster().setDataElements(0, 0, cols, rows, sourceByteArray);
当我必须处理类型不是CvType.CV_8S
或CvType.CV_8U
的Mat时,我的问题出现了(只有这些可以存储在字节数组中,其他需要short,int,float,double , 分别)。
尝试将image.getRaster().getDataBuffer()
强制转换为DataBufferFloat
会抛出一个无法转换异常,就像在将数据传递给setDataElements方法时尝试使用float数组来存储数据一样。
如何解决这个问题?