외곽 추출 기능을 하면서 보니까 계속 이미지가 비어있다는 것을 확인해서 오류가 나는 것을 보았고
사진이 저장되는데 왜 비어있다고 하지? 했는데
로그를 잘 보니까 저장하기전에 외곽을 추출하는 메소드가 실행되어 오류가 나는 것이었다
openCV 샘플코드에 로그가 잘 써있어서 디버깅이 이럴때 순조롭다..
아래와 같이 사진을 찍은 후에 저장 전 edge Detection 메소드 실행을 한다..
03-16 20:24:59.577 29901-29901/OCVSample::Activity: onTouch event
03-16 20:24:59.582 29901-29901/JavaCameraView: Taking picture
03-16 20:24:59.587 29901-29901/OCVSample::Activity: edge Detection
03-16 20:24:59.588 29901-29901/OCVSample::Activity: true ?empty
우선 사진 조작기능이 작동하지 않더라도 App의 강제종료 현상을 막기 위해 try catch문을 써준다
또 empty()메소드를 사용하여 현재 사용할 이미지가 비어있는지 여부를 확인한다
이 메소드는 true/false 두가지 값을 리턴하는데 아래와 같이 if(!메소드) 작성하면
이미지가 비어있는 상태가 아닐 때 작성한 코드가 실행하게 된다
만일 empty한 상태에서 하고 싶다면 ! 기호를 빼면 된다
if문을 풀어서 쓰면 if(originImg.empty() == false) 이것과 같다
if문은 조건이 true일 때만 실행되므로 기호를 잘 사용하면 소스를 줄일 수 있다
1 2 3 4 5 6 7 8 | try{ // source code if(!originImg.empty()){ .... } }catch (CvException e){ e.printStackTrace(); } | cs |
이제 일정 시간 후에 메소드를 실행하게 해주는 Handler에 대해 보도록 하겠다
원래는 비동기통신이나 Thread를 사용해야하나 싶었지만 그것까진 필요가 없어보여
우선 일정 시간이 지난 후에 동작하도록 간단하게 작성하였다
Handler는 밀리세컨단위이므로 1초라면 1000 이라고 입력한다
Handler는 os 패키지의 클래스를 import한다
1 2 3 4 5 6 | handler.postDelayed(new Runnable() { @Override public void run() { edgeDetection(fileName); } }, 3000); | cs |
이 오류를 해결했더니 또 다른 오류가 난다.........
짜증.............
정보처리도 해야하는데 졸작과 우선순위를 어떻게 해야할지 모르겠다 ;(
'Programming > Android' 카테고리의 다른 글
[안드로이드] OpenCV for Java 이미지 불러오기, 저장하기(load image&save image) (0) | 2017.04.30 |
---|---|
[안드로이드] OpenCV error: Cannot load info library for OpenCV 오류를 해결하고싶다 + 해결법 (3) | 2017.03.23 |
[안드로이드] OpenCV for Android - python 연동 실패.. (Java로 바꾸자..) (0) | 2017.03.16 |
[안드로이드] OpenCV샘플소스 - CameraControl (0) | 2017.03.09 |
[안드로이드] Navigation Drawer 사용하기 (0) | 2017.03.08 |