【问题标题】:image manipulation as byte[]图像处理为 byte[]
【发布时间】:2018-01-02 06:47:49
【问题描述】:

对不起,我英语不好。

我想做一个实时图像处理应用。(Binarization, color inverse...etc.)

它需要速度,所以我想将它作为byte[] 操作,而不是转换为ImageBitmap

我从相机得到的图像格式是YUV(NV21),但是因为我不知道这种格式,所以我将它转换为JPEG。

但它也没有像我预期的那样工作。(我认为它会是每一个像素一个字节或每一个像素三个字节。)

所以,

  1. 我怎样才能将manipulation(binarization, color inverse)这样的JPEG字节数组做到位?
  2. 或者如何将 NV21 格式的字节数组转换为 RGB 字节数组?

并且我使用了将NV21转换为JPEG的方法。

YuvImage yuvimage = new YuvImage(bytes, ImageFormat.NV21, width, height, null);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        yuvimage.compressToJpeg(new Rect(0, 0, width, height), 100, outputStream);

我从onPreviewFrame(Camra.PreviewCallback) 得到yuv 图像字节数组。

【问题讨论】:

  • +我的设备不支持RGB格式,所以我要转换一下。
  • 每个问题一个问题,请。这里的 1 和 2 应该是分开的。此外,您需要定义操作()应该做什么,现在它太模糊了。此外,直接处理 JPEG 是不寻常的——它的压缩数据。您通常将其转换为位图并进行处理。而且你永远不会使用 JPEG 作为中间格式,因为它有损——如果有的话,你会使用 PNG。
  • 我会记住的。我还没习惯这里。
  • @GabeSechan 谢谢你的建议。

标签: java android arrays image


【解决方案1】:

我认为您可以使用 setPreviewFormat(int) 设置相机捕捉的默认 NV21 格式以外的其他格式。

https://developer.android.com/reference/android/graphics/ImageFormat.html#NV21

【讨论】:

  • 是的,我试过了。但我的设备不支持 RGB 格式,所以我必须转换它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2011-11-04
  • 1970-01-01
相关资源
最近更新 更多