【发布时间】:2019-03-03 08:05:32
【问题描述】:
我是JAVA OpenCV的新用户,今天刚通过官方教程学习如何将Mat对象转换为BufferedImage。
从demo代码中可以了解到输入的图片源是一个Matrix形式,然后sourcePixels好像会是图片的字节数组表示,所以我们需要从@987654324中获取值@矩阵到sourcePixels。这里sourcePixels 具有整个图像字节长度的长度(大小:w * h * 通道),因此它会一次获取整个图像字节值。
然后它来了,这对我来说并不直观。 System.arraycopy() 似乎将值从sourcePixels 复制到targetPixels,但实际返回的是image。我可以从代码中猜到targetPixels 与image 有关系,但是我看不到我们如何将值从sourcePixels 复制到targetPixels,但它实际上会影响image 的值?
这是演示代码。谢谢!
private static BufferedImage matToBufferedImage(Mat original)
{
BufferedImage image = null;
int width = original.width(), height = original.height(), channels = original.channels();
byte[] sourcePixels = new byte[width * height * channels];
original.get(0, 0, sourcePixels);
if (original.channels() > 1)
{
image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
}
else
{
image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
}
final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
System.arraycopy(sourcePixels, 0, targetPixels, 0, sourcePixels.length);
return image;
}
【问题讨论】:
标签: opencv bufferedimage