JavaCV将Int数组转换为灰色数据

时间:2017-01-15 12:35:16

标签: android opencv javacv yuv

我正在尝试在Android上使用JavaCV做最基本的事情,但仍然失败。

我想将从Camera.PreviewCallback OnPreview收到的yuv byte []数组转换为灰度Mat进行进一步处理。

public void onPreviewFrame(byte[] data, Camera camera) {

  /* Extract grayscale from yuv */
  ByteBuffer gray = ByteBuffer.allocate(data.length * 4);
  IntBuffer intBuffer = gray.asIntBuffer();

  int p;
  int size = width*height;
  for(int i = 0; i < size; i++) {
        p = data[i] & 0xFF;
        intBuffer.put(0xff000000 | p<<16 | p<<8 | p);
  }

  Mat g = new Mat(height,width,CV_8UC3);
  byte test[] = gray.array();
  g.data().put(test);  /* crashes here */

在我的调试检查中,由于内存不足,它似乎崩溃了。它没有给出任何错误tracke。只是这样的消息

  

A / libc:致命信号11(SIGSEGV),代码1,故障地址0xa0c6a000 in   tid 5475(com.aztech.jcv)

我尝试过CV_8UC1,但仍然失败了。问题可能是内存不匹配。请有人建议一个工作替代方案。使用内置的cvCvtColor无法正确解码 - 它会给出一个带有奇怪线条的全黑色垫子。

0 个答案:

没有答案