opencv를 이용해서 영상처리를 진행하고 있는데요;

 

영상처리의 기본은 그레이스케일 인데....

 

그레이로 바꾸고 비트맵을 이용해 화면에 출력하려고 하면 너무 오랜 시간이 걸립니다.

 

 

이미지 (720*1280) 좀 크긴 합니다만... 그레이로 바꾸고

 

bitmap.copyPixelsFromBuffer(cvGray.getByteBuffer());
  image.setImageBitmap(bitmap);  // ImageView image;

 

이렇게 하면 칼라 영상으로 나오는거 있죠? 그레이 변환은 분명 잘 됬는데..

 

왜그러나 해서 찾아봤더니...

 

 

Bitmap.Config에는 그레이가 없으니

 

private Bitmap setGrayImageBitmap(IplImage img, int w, int h) {
  Bitmap bitmap;
  bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
  
  for(int y=0; y<h; y++) {
   for(int x=0; x<w; x++) {
    int gray = (int) Math.floor(cvGet2D(img, y, x).getVal(0));
    bitmap.setPixel(x, y, Color.argb(255, gray, gray, gray));
   }
  }
  
  return bitmap;
 }

 

이런 작업을 거치더라구요...

 

근데 이 setPixel 이라는 작업을 포문 921600번이나 하고 있으니 오래걸리는 것 같은데... (18초 걸립니다..)

 

다른 개선할 방법이 없을까요?