안드로이드 스튜디오 JavaCV 관련

Posted by ITPangPang
2016. 7. 19. 23:41 안드로이드(android)/알아두면 좋은것


안드로이드 스튜디오 

JavaCV 관련


ㆍ 이번에 NDK, OpenCV를 써보면서 JavaCV라는것도 있길래

   한번 써봤는데 확실히 C,C++을 안건드려서 쉽긴 한데

   사용하는거 보다 버전 맞추고 셋팅하는게 더 힘든것 같다.


ㆍ꾸역꾸역 대충 셋팅 맞춰서 돌리는것 까진 완료했다..

   Image Stitching 까지 해봤는데 OpenCV에서는 어려움이 

   많았는데 JavaCV로 하니까 금방 완성시켰다.



앞으로 OpenCV를

계속 쓰게 될거 같아서


JavaCV는

이번에 쓰고 언제

쓰게 될지 모르니

깊게 파진 않고


막혔던 부분만

기록에 남기려고 한다.


Build.gradle(:app)

apply plugin: 'com.android.application'

android {
packagingOptions {
exclude 'META-INF/services/javax.annotation.processing.Processor'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
}

compileSdkVersion 23
buildToolsVersion "23.0.2"

defaultConfig {
applicationId "Package"
minSdkVersion 17
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
configurations {
all*.exclude group: 'org.bytedeco', module: 'javacpp-presets'
}
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.10-0.11', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.10-0.11', classifier: 'android-x86'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.5.1-0.10', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.5.1-0.10', classifier: 'android-x86'
compile files('libs/opencv.jar')
compile files('libs/ffmpeg.jar')
compile files('libs/javacpp.jar')
compile files('libs/javacv.jar')

}

이렇게만 해주고

바로 Java에서

써보니 쉽게 써진다.




imgcodecs 관련

이미지를 Mat으로 바꾸기 위해

사용하는데

OpenCV랑 똑같아서 바로

똑같이 입력해봤는데


imcodecs.imread("image 경로");


이상하게 imcodecs가 빨간줄이 뜨고

Alt+Enter를 눌러도 Import가 안뜨는것이다


Mat matImage1 = imgcodecs.imread(filePath + "/stitchImg.jpeg");

처음에는 이런식으로 했는데 빨간줄이 떠서


아래와 같이 바꾸니 됬다

opencv_core.Mat matImage1 = opencv_imgcodecs.imread(filePath + "/stitchImg.jpeg");


물론 쓰는것도 똑같다

opencv_imgcodecs.imwrite




stitching

stitcher에서 막히는 부분은 

없었다


MatVector에 차곡차곡 넣어준후에

stitch 해주니까 바로 된다

opencv_stitching.Stitcher s = opencv_stitching.Stitcher.createDefault(false);
org.bytedeco.javacpp.opencv_core.MatVector stitchVector = new org.bytedeco.javacpp.opencv_core.MatVector(2);

stitchVector.put(0, matImage1);
stitchVector.put(1, matImage2);

int status = s.stitch(stitchVector,matImage3);




카메라 촬영후 Stitching


위에서 고정이미지 2장으로

Stitch 테스트를 마친후


Preview로 사진을 찍은후에

찍은 사진 여러장을

Stitch해봤다.


2장으로 테스트할때는

괜찮았는데


여러장으로 하니 역시

OOM이 발생했다



사진을 Uri, bitmap등 변환해서

BitmapFactory.Option으로

처리를 한 후에 resize해서

다시 Mat로 변환한후에

Stitching 하니까 문제 없이

사진 여러장도 완성했다