2016-10-24 5 views
0

YUV_420_888 이미지에서 일부 이미지 처리를 수행하고 그레이 스케일 에디션이 필요합니다. 내가 YUV 이미지에 대해 읽었을 때 이미지의 Y 평면을 추출하기에 충분해야합니다. 안드로이드에서 Y 평면을 바이트 배열로 변환하는 작업 흐름을 시도해 볼 것입니다.YUV 이미지를 그레이 스케일 이미지로 변환 이미지 - RGB와 그레이 스케일이 같은 결과?

Image.Plane Y = img.getPlanes()[0]; 
ByteBuffer byteBuffer = Y.getBuffer(); 
byte[] data = new byte[byteBuffer.remaining()]; 
byteBuffer.get(data); 

그래서 내가이 질문을 다른 그레이 스케일 이미지로 현재 수 (또는 이미지 처리의 적어도 결과)이 이미지를 비교하려면, 나는이 거의 Y-비행기를 추출 얻을 그레이 스케일 이미지입니다 그레이 스케일로 바뀐 RGB와 동일합니까? 아니면이를 위해 몇 가지 추가 처리 단계를 수행해야합니까?

답변

1

예, Y 평면에서 가져온 data은 RGB 이미지를 통과 한 경우와 동일해야합니다.

1

아니요, 이미 회색 계조 인 YUV_420_888 이미지가 표시되는 IR 센서를 사용하고 있습니다. 하지만 그것을 바이트로 변환하려면 다음과 같은 함수를 사용하여 오류가 발생했습니다. 당신의 대답에 따라, 나는 오직 Y 비행기를 가져 갔고 결과에 녹색 스크린을주었습니다.

public static byte[] convertYUV420ToNV12(byte[] byteBuffers){ 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    try { 
     outputStream.write(byteBuffers); 
     //outputStream.write(byteBuffers[1]); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    // outputStream.write(buffer2_byte); 

    byte[] rez = outputStream.toByteArray(); 
    return rez; 
} 
:

ByteBuffer[] buffer = new ByteBuffer[1]; 

      Image image = reader.acquireNextImage(); 
      buffer[0] = image.getPlanes()[0].getBuffer().duplicate(); 
      //buffer[1] = image.getPlanes()[1].getBuffer().duplicate(); 

      int buffer0_size = buffer[0].remaining(); 
      //int buffer1_size = buffer[1].remaining(); 

      buffer[0].clear(); 
      //buffer[1].clear(); 

      byte[] buffer0_byte = new byte[buffer0_size]; 
      //byte[] buffer1_byte = new byte[buffer1_size]; 

      buffer[0].get(buffer0_byte, 0, buffer0_size); 
      //buffer[1].get(buffer1_byte, 0, buffer1_size); 

      byte[] byte2 = buffer0_byte; 
      //byte2=buffer0_byte; 
      //byte2[1]=buffer1_byte; 
      image.close(); 
      mArrayImageBuffer.add(byte2); 
바이트를 dequeing 후

및 funcion로 이동

관련 문제