Swift 에서 OpenCV 사용하기
Swift 에서 Bridge 를 이용해 objective-c 를 호출하고 objective-c 에서 opencv 를 호출하여 리턴해주는 구조입니다.
1. 프로젝트 생성
App > Next
2. CocoaPods 로 셋업
프로젝트가 생성되면 터미널에서
>> pod init
혹시 위와 같은 오류가 발생하면 sudo gem pristine ffi --version 1.15.0 실행 ( 각자 메시지에서 버전을 확인하세요 )
Podfile 이 생성되었으면, vi Podfile 을 입력해서 수정모드로 들어갑니다.
>> vi Podfile
i 를 누르면 입력할 수 있는 상태가 됩니다. 다 입력했으면 esc -> : -> wq -> 엔터
각자 맞는 ios target platform 버전을 입력합니다.
Xcode 가 열려있다면 닫아주시고 아래 명령어를 입력하세요.
>> pod install
3. Xcode실행
Pods 와 Frameworks 폴더가 생겼네요.
4. new > file > Cocoa Touch Class
전 MyOpenCV 로 정했습니다.
언어는 Objective-C 로 선택합니다.
Next > Next
Swift Project 에서 Objective-C 파일을 생성했기 때문에 Bridging header 를 만들지 물어보는 다이알로그가 뜹니다.
Create Bridging Header 를 클릭합니다.
MyOpenCv.h 에서 import 를 추가합니다.
MyOpenCv.m 을 MyOpenCv.mm 으로 변경하고 import 추가합니다.
아까 생성한 Bridge-header 에 import 를 추가합니다. (각자 프로젝트이름-Bridging-Header.h 로 되어있습니다.)
5. prefix header
new > file > new file, PCH File
Creat
PrefixHeader.pch 에 내용 추가
PrefixHeader 를 찾을 수 있도록 빌드 셋팅을 해줍니다.
6. OpenCV 메소드 사용해보기
가장 흔한 Gray 이미지로 변경하는 것을 해보겠습니다.
MyOpenCv.mm 에 코딩을 합니다.
//
// MyOpenCv.m
// HelloOpenCv
//
// Created by USER on 2021/09/21.
//
#import "MyOpenCv.h"
#import <opencv2/opencv.hpp>
#import <opencv2/imgcodecs/ios.h>
using namespace std;
using namespace cv;
@implementation MyOpenCv
#pragma mark Public
+ (UIImage *)toGray:(UIImage *)image {
// Transform UIImage to cv::Mat
cv::Mat imageMat;
UIImageToMat(image, imageMat);
// If the image was alread grayscale, return it
if (imageMat.channels() == 1)
return image;
// Transform the cv::mat color image to gray
cv::Mat grayMat;
cv::cvtColor(imageMat, grayMat, COLOR_BGR2GRAY);
// Transform grayMat to UIImage and return
return MatToUIImage(grayMat);
}
@end
MyOpenCv.h 에 toGray 메소드를 추가합니다.
7. 사용
이제 swift 에서 opencv 를 사용할 준비가 되었습니다.
ViewController 에 ImageView 와 Button 을 추가합니다.
버튼을 누르면 ImageView 의 이미지를 gray 로 변경하여 다시 ImageView 에 image로 설정하는 것입니다.
실행 후 버튼을 누르면,
브라운이 흑곰으로 변했네요.
이상입니다~
이제 opencv 에서 사용할 함수들을 MyOpenCv.mm 에 구현하고
Swift 에서 가져다가 사용하면 됩니다. (Bridging Header가 있으니까~)
'IOS (Swift, Objective-c)' 카테고리의 다른 글
[Xcode] RuntimeError - [Xcodeproj] Unknown object version. (0) | 2021.09.22 |
---|---|
[iOS] Swift Navigation Controller 추가하기 (0) | 2021.09.22 |
[Swift] Camera/Photo Permission 카메라 권한 설정 (0) | 2021.09.11 |
[swift5] 함수 func 기본 사용법 (0) | 2021.08.26 |
[xcode] PlayGround 사용방법 (0) | 2021.08.26 |
댓글