# OpenCV for Android( JavaCV Setting)
- 필요한 도구 [01참조]
&. Java SDK
&. Eclipse
&. OpenCV 2.2 ( http://sourceforge.net/projects/opencvlibrary/files/ )
&. Precompiled for Android 2.2 ( http://code.google.com/p/javacv/downloads/list )
&. javacv-bin-20110511.zip
&. javacv-src-20110511.zip
&. OpenCV-2.2.0-android-arm.zip
※ 주의사항
&. Android 를 돌리기 위한 기본 환경 설정이 잡혀져 있는 상태에서 Precompiled for Android 2.2 의 파일만 있어도 사용이 가능하다
# 환경설정
&. 생각해보니, 특별하게 환경 셋팅이라고 할게 없다. 단지 Android 를 사용하면서 Library 를 사용하는 방법을 알아야 하겠다. 다음 챕터에서 알아보자.
# Quick Start
&. http://code.google.com/p/javacv/ 의 Quick Start for OpenCV 를 참조하길 바람
- Follow the instructions on this page: http://developer.android.com/guide/tutorials/hello-world.html
- Go to File > New > Folder, select your project as parent folder, type "libs/armeabi" as Folder name, and click Finish.
- Copy javacpp.jar and javacv.jar in the newly created "libs" folder.
- Extract the *.so files from javacv-android-arm.jar as well as the *.so files of OpenCV in the newly created "libs/armeabi" folder.
- Navigate to Project > Properties > Java Build Path > Libraries and click "Add JARs..."
- Select both javacpp.jar and javacv.jar from the newly created "libs" folder.
&.
Eclipse(Android 2.2) 버전을 중심으로 설명을 함
&. Eclipse 에서 Android Project 를 생성
&. 프로젝트에서 File > New > Folder , "libs/armebi" 폴더를 생성
&. 위의 Java-bin-xxx.zip 파일을 압축을 풀면 javacpp.jar, javacv.jar 파일이 있다.
libs 폴더 아래 두면 된다. ( Eclipse 에서 F5 Key 를 눌려서 프로젝트 Tree 를 새롭게 갱신해서 확인)
&. javacv-android-arm.jar 파일을 libs/armebi 폴더아래에 압축 푼다.
&. Project > Properties> Java Build Path > Libraries and click "Add JARs..." 를 찾아옴
&. javacpp.jar, javacv.jar 파일을 선택한다.
※. 물론 여기서 끝이났다.
- 여기까지는 누구나가 다 할 수 있을 것이다. (금방...합니다)
- 그리고 이제부터 하는 내용은! Java에서 OpenCV 를 사용하는것이 아니라 Android Project 에서 OpenCV 를 사용하기위해서 삽질한 내용을 정리하고자 합니다.
# 먼저 주절 주절 정리하자.
- Java package 에는 있지만 Android package 에는 없다.
Java API 를 삶펴보면 알겠지만, 무수히 많은 package 들이 있다. 하지만, Android package 에는 아직 추가가 되지 않은 내용들이 많이 있다. 그리고 Android 에서는 사용을 할 수 없는 package 들이 있다 라는 것. 예를 들어서, CanvasFrame 은 Java에서 swings(GUI) 으로 출력을 할 수 있지만, Android 에서는 Android 만의 출력방법에 따라야 하므로 사용방법이 틀려져야 한다는 것이다.
- IplImage 와 Bitmap 의 형변환
OpenCV 에서는 IplImage data 형을 사용을 한다. 하지만 Android 에서는 Bitmap 형태를 이용하여 Android Canvas 에 출력을 하게 된다. ( 또는 EditView에 출력 )
- 간단하게 방법만 알아보도록 하자.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IplImage image;
image = cvLoadImage("/sdcard/image0.png");
if (image != null) {
cvSmooth(image, image, CV_GAUSSIAN, 11);
cvSaveImage("/sdcard/image11.png", image);
}
try {
IplImage imagewithalpha = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 4);
cvCvtColor(image, imagewithalpha, CV_RGB2RGBA);
Bitmap bm = Bitmap.createBitmap(image.width(), image.height(), Bitmap.Config.ARGB_8888);
bm.copyPixelsFromBuffer(imagewithalpha.getByteBuffer());
ImageView iv = (ImageView)findViewById(R.id.testview);
iv.setImageBitmap(bm);
} catch (Exception e) {
Log.w("mytag", "fail to display...");
}
}
필요한 것만 짧게 쓰도록 하자^_^/
1. Android SD Card 에서 읽어오기 위해서 "/sdcard/파일경로.png" 로 하였다.
2. OpenCV 의 Function 을 그대로 사용하였다.
3. Iplimage 를 Bitmap 로 값을 copy 시켰다.
4. Bitmap 를 이용하여 ImageView 에 출력을 하였다
JavaCV 정리는 스크린샷이 없습니다. 그만큼 간단하니깐! 지저분하게 하기 싫네요..하하(귀차니즘..?)
비공개가 얼마나 길지는 모르지만,
모쪼록 혼자만의 공부 이대로 남기자.
# Reference