본문 바로가기
IOS (Swift, Objective-c)

[IOS] Swift 에서 OpenCV 사용하기 (OpenCV-4.1.0) (Xcode 12)

by bryan.oh 2021. 9. 21.
반응형

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가 있으니까~)

728x90
반응형

댓글