그래서 아이폰에서도 openCV를 간편하게 쓸 수 있죠.
... 말이 간편하다는 거지 저처럼 framework 사용 경험이 적은 사람은 이 쉬운 것도 갈피를 못 찾아 헤매기 일수 입니다.
iOS 개발에 opencv를 적용하는 것부터, 적용한 김에 예제로 라플라스 샤프닝을 띄워보도록 하죠.
준비물은....
그리고 UIImage - CvArr 변환기 정도겠네요.
openCV부터 받아 보도록 합시다.
우선 sorceForge.net으로 갑니다. 간단하게 sf.net이라고 쳐도 들어가 집니다.
이렇게 생긴 페이지로 갑니다. 여기서 옆에 보이는 Download를 누르면.
저처럼 헤매게 됩니다 -_- 저건 "소스" 입니다. 직접 빌드할꺼면 받아도 됩니다만, 어렵고, 게다가 지원하는 모든 OS의 프레임웤이 있기 때문에 저걸 받을 필요는 없습니다.
고로 우리는 어디로 가냐면
Files>opencv-ios 로 갑니다.
지원하는 버젼이 보입니다. iOS는 2.4.2부터 지원해서인지, 2개 밖에 없네요. 내키는걸 골라줍시다. 이왕하는거 최신버젼이 좋겠죠.
버젼 폴더 안에 들어가면 zip 파일이 있습니다. 이걸누르면.
많이 익숙한 다운로드 페이지가 나옵니다. 이것으로 프레임워크가 준비되었습니다.
일단 여기까지 진행하셨으면,
이렇게 생긴 폴더가 어딘가에 있어야 합니다.
이걸 xcode에서 쓰기위해서 적절한 위치에 배치해야 합니다.
적절한 위치를 보여드리자면,
이런 위치가 됩니다. 사실, 이 과정은 안 하셔도 됩니다. 그럼에도 불구하고 이렇게 하는 이유는
프레임워크 추가할때 검색이 되게 하기 위해서입니다.
저 위치에 두지 않으면, Add Other...를 눌러서 직접 찾아서 추가해주어야 하기때문에 아무래도 번거롭죠.
프레임워크가 준비되었으니 예제 프로젝트를 만들어 봅시다.
대충 이런식으로 만들어 주세요, singleView 프로젝트 입니다.
그리고 저는 ARC를 씁니다. 따라서 이 뒤로 나올 코드에 메모리 관리는 신경쓰지 않습니다.
ARC 안 쓰실분들은 (ios 구버젼은 ARC가 안된다죠? ) 이점 유의해주세요.
일단 Prefix.pch에 opencv 헤더를 추가해줍니다.
그 다음 viewController.xib에 가서
이런식으로 만들어 줍니다.
지금부터 만들 예제는, 화면을 터치하면 라플라스샤프닝이 적용되고, 한번 더 터치하면 원본이미지가 나오게 할 겁니다.
viewController.h에는
이런식으로 작성해주세요.
IBOurlet 연결 하는거 잊지 마시구요.
viewController.m에는
이런식으로 작성해주세요.
메모리에 올라갈때 이미지 처리를 다 해서 UIImage로 가지고 있고,
화면이 터치가 되면 그걸 바꿔 보여주는 코드입니다.
그런데, 이미지의 주석에도 달려 있지만, IplImage를 어떻게 초기화 해야 할까요?
참고로 말씀드리자면, 파일에서 불러오는 cvLoad~ 는 iOS의 샌드박스 때문인지 항상 NULL 을 리턴합니다.
그런고로, UIImage를 변환해야 하는데요, 이걸 위해
이런걸 준비했습니다.
opencvConverter.zip
출처 : http://stackoverflow.com/questions/12214273/opencv-install-in-xcode/12216556#12216556
Iplimage 변환 코드도 stackoverflow.com의 다른곳에서 찾아서 붙여논건데, 이건 제가 책갈피를 안 저장했군요.. 어딘지 모르겠네
받으신 다음에 적당히 배치해주세요
저는 supporting Files에 두는 편입니다.
변환기를 얻었으니 코드를 수정해야 겠죠?
이렇게 바뀝니다. - 헤더 임포트 하는거 잊지 마세요.
약간 문제가 있는데 주석에 써있으니 참고하세요.
@ UIImageFromeIplImage 고쳐주실 분 찾습니다.....
여기까지 따라오고 난뒤 빌드를 해보면...
빌드가 안됩니다.
전 이런게 뜨네요.
이걸 해결하기 위해서는 빌드세팅을 바꿔야 합니다.
이 방법은 이곳에서 알아 냈습니다.
http://karuanas.blogspot.kr/2012/04/opencv-corehpp.html
같은 블로그의 다른 글
http://karuanas.blogspot.kr/2012/08/ios-opencv.html
이렇게 해주세요. 저 2개는 꼭 해야 합니다.
@ 이걸 하고 나서부터는 자동완성이 Objective-C 보다 c++ 우선으로 됩니다. 사실상 [sender message]; 들은 자동완성이 안되요.
관련 작업 다 해놓고 하시길 추천합니다.
예제가 완성되었습니다.
근데 그러고 보니 이미지를 빼먹었네요.
전 이걸 쓰도록 하겠습니다.
왠지 이분을 써야 할 것 같아서요.
그래서 빌드를 해보면 이런결과가 나옵니다.
정말 끝입니다.
이런글 쓰는건 처음이라 마무리를 어떻게 써야 할지 모르겠네요.
예제 따라하시는게 귀찮으신 분은 아래에 있는 프로젝트 폴더를 받아서 빌드해보셔도 좋을것 같습니다.
(아 물론, 그냥 이것만 받으면 opencv 프레임워크가 없다고 나올겁니다. 프레임워크 위치는 맞춰주세요.)
LaplaceShapening.zip