광고 한번만 클릭 부탁드립니다^^
포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^
Subject : HashMap 사용법, (아니 중첩 arraylist 사용법)
최종수정일 : 2011.06.06
최종수정일 : 2011.06.06
안드로이드에 Camera 를 공부하면서(with JavaCV) 발생하는 문제점 입니다.
이미지 프로세싱을 하기위해서는 OpenCV 이미지의 IplImage 형태로 변환을 하게 됩니다.
Android Camera 의 영상은 YUV420 으로 되어있습니다.
이를 RGB, RGBA 형태로 변환을, 그리고 data형의 변환을 합니다. (byte[] => IplImage) 로 변환!
by 퓨림노
몇가지 주의 사항을 알려드리겠습니다.
1. Android 에서 Image Processing 을 하기위해서, 아래와 같이 하면 되겠지? 라는 생각을 하면 안된다.
processImage(byte[] data, int width, int height) 에서
data[] -> bgr[] -> IplImage -> ( Image Processing ) -> bgr[] -> data[] 의 순서대로 흘러가면
카메라의 영상이 변경이 되어있을 꺼라 생각 된다. 그러나 Android에 Camera를 이리저리 손대보아도 수정이 불가 하였다. 그래서 Document 를 찾아봐야하는데..안찾아봤네요!!!!!!( posting 하면서 느낀점...)
아무튼..Caemra 의 영상을 수정하여 되돌리기는 실패를 하였다.( 현재로서는...수정되면 고쳐야죠~!!)
테스트를 할때에는 Image processing 을 하고나서 결과이미지를 file 로 저장을 하여서 확인을 하였습니다.
간단하게 소스를 공개 하겟습니다.
[소스코드]
protected void processImage(byte[] data, int width, int height) { try { // Debug Get Time1 DebugFIleIO.getInstance().newFile( "processImage_1", "_0"); int size3 = width * height * 3; byte bgr[] = new byte[size3]; IplImage ImgGray = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1 ); IplImage ImgRGB = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3 ); // test 1/2 size //IplImage ImgGray2 = cvCreateImage(cvSize(width/2, height/2), IPL_DEPTH_8U, 1 ); VRConvert.vrBGRformYUV(bgr, data, width, height); ImgRGB.getByteBuffer().put(bgr); // IplImage <- bgr(byte) cvCvtColor( ImgRGB, ImgGray, CV_BGR2GRAY ); // test 1/2 size //cvResize( ImgGray, ImgGray2 ); DebugFIleIO.getInstance().newFile( "processImage_2", "_0"); LSDMgr.getInstance().LsdImageProcessingonMobile( ImgRGB, ImgGray, width, height); } catch (Exception e) { Log.w("vbflash", "Exception - processImage()... "); } postInvalidate(); }vrBGRformYUV() 함수는 첨부파일에 있는 것을 사용하면 됩니다. ( 알아서 스샤샤샤!! )
그리고 'ㅅ'/ 뭐 딱히 더 드릴 이야기는 없습니다.
물론 요까지 하신다면 알아서 척척 하실 수 있을꺼라 생각됩니다.
(이것도 URL 을 잘 모르겠네요...T_T)
참 포스팅을 끝내려고하니깐, 당연히 알아두어야 하는 것이 있지 않습니까!?
카메라를 Image Processing 을 하였는데 Camera 에는 결과 출력을 해야하지 않겠습니까!?
MFC처럼 OnDraw() 함수에 출력만 해주면 됩니다.
물론 Android 에서 Camera 를 사용하는 방법은 여러가지가 있는데, 위의 processImage() 함수가 호출이 되지 않던가?
아니면 Draw() 가 안되는 경우가 발생하게 됩니다. 물론 위에 압축파일을 실행해서 보시면 알꺼라 생각합니다.
카메라의 구조를 각각의 class 로 뽑으려고 하였으나, 생각처럼 안되네요...(위의 소스는 인터넷에서 추출한 소스입니다.
[소스코드]
protected void onDraw(Canvas canvas) { // ... Paint paint = new Paint(); paint.setColor(Color.RED); String s = "JavaCV for Android"; float textWidth = paint.measureText(s); int w = getWidth(); int h = getHeight(); canvas.drawText(s, (getWidth() - textWidth) / 2, 20, paint); Paint pntR = new Paint(); pntR.setColor( Color.YELLOW ); pntR.setStrokeWidth(5); //... draw ... //... draw ... }전 이글을 보는 당신보다 한발짝 더 나아가고 싶습니다. !!
'Mobile > android' 카테고리의 다른 글
Android Google Map API Key 등록하기 (0) | 2011.06.06 |
---|---|
[JNI/NDK] Android Camera & Canvas Size (0) | 2011.06.06 |
[Android] Android JavaCV - Setting & Quick Guide (3) | 2011.05.13 |
Android JavaCV (1) | 2011.05.12 |
[Android] Android - OpenCV Setting (83) | 2011.02.26 |