마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Javacv Bitmap to IplImage

0 추천

API최신 버젼에서 계발을 하고 있음니다. 라이브러리는 GitHub에 Javacv - Bin에 있는 것을 사용하고 있습니다.

이미지를 Gray로 변환한뒤 IplImage를 Bitmap으로 변환하려 하는 데 계속해서

06-04 01:16:08.620: E/AndroidRuntime(5362): java.lang.RuntimeException: Buffer not large enough for pixels
 
이러한 에러가 발생이 되는 데요. 뭔가 해답을 못찾아서 고생하고 있습니다. 선배님들 이에러 처리할 방법 아시면 알려주세요.
 
Bitmap bit = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
IplImage image = IplImage.create(bit.getWidth(), bit.getHeight(), IPL_DEPTH_8U, 4);
IplImage gray = IplImage.create(cvGetSize(image), IPL_DEPTH_8U, 1);
bit.copyPixelsToBuffer(image.getByteBuffer());
 
cvCvtColor(image, gray, CV_RGB2GRAY);
 
Bitmap bitmapOut = Bitmap.createBitmap(gray.width(), gray.height(), Bitmap.Config.ARGB_8888);
bitmapOut.copyPixelsFromBuffer(gray.getByteBuffer());
view.setImageBitmap(bitmapOut);

 

밤밤바 (1,450 포인트) 님이 2015년 6월 4일 질문

2개의 답변

0 추천
메모리 문제인데요.

이미지를 만들 버퍼가 부족하다고... 이건 기기마다 앱마다 다 다른 상황인지...

우선은 라지힙의 사용하시고

이미지를 만들기 전 최대한 불필요한 메모리는 해제 하시는

방법 이외에는 딱히 없는 것 같습니다.
컴러기 (22,230 포인트) 님이 2015년 6월 4일 답변
0 추천
bit.copyPixelsToBuffer(image.getByteBuffer());

이 부분에서 image의 바이트 버퍼 사이즈보다

bit의 바이트 버퍼 사이즈가 작아서 나는 에러일 겁니다.

Bitmap bit = BitmapFactory.decodeResource(getResources(),); 요부분에서

아이콘말고 아주 큰 사이즈의 이미지를 로드한 뒤 테스트 해보세요.

이건 극약처방이고

bit의 바이트버퍼를 크게 만들어줘야 될겁니다.
파닭칡힌 (1,820 포인트) 님이 2015년 6월 4일 답변
제가 잘못 봤내요 파닭님의 말씀이 맞는 것 같습니다.
target의 크기가 source보다 작아서 생긴 문제내요.
bit에 큰이미지를 사용하여도 동일한 에러가 발생이 됩니다...ㅜㅜ
bitmapOut.copyPixelsFromBuffer(gray.getByteBuffer());여기에서 계속해서 에러가 발생되고 있습니다.
아미 이문제는 cv를 하시면서 최초 원본이미지와 lplImage의 차이때문에 생기는 문제가 아닌가 의심됩니다.
우선 확인하셔야 할 사항은 최초의 이미지가 ARGB_8888 인지 확인 해보셔야 할 것 같습니다.
IplImage이미지가 제가 볼때는 4byte이미지 포멧으로 만들어지는 듯 합니다.
만일 원본으로 만들어지는 이미지가 RGB_565 라면 2바이트 이미지이고 여기다 같은 가로새로 크기의 4byte 이미지를 넘기려 하신다면 버퍼보다 픽셀데이터의 크기가 커지게 될 것 같습니다.
우와! 감사합니다. 해결하였습니다!!! Byte차이가 답이였네요.ㅠㅠ
...