티스토리 뷰




외곽 추출 기능을 하면서 보니까 계속 이미지가 비어있다는 것을 확인해서 오류가 나는 것을 보았고

사진이 저장되는데 왜 비어있다고 하지? 했는데

로그를 잘 보니까 저장하기전에 외곽을 추출하는 메소드가 실행되어 오류가 나는 것이었다


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



이 오류를 해결했더니 또 다른 오류가 난다.........

짜증.............

정보처리도 해야하는데 졸작과 우선순위를 어떻게 해야할지 모르겠다 ;(



도움이 되셨다면.. Buy me a coffeeBuy me a coffee
댓글
댓글쓰기 폼