iPhone 앱에서 OpenCV (CocoaPods를 사용하지 않는 Ver)
소개
연구에서 화상 처리를 사용할 기회가 많고, iOS에서도 뭔가의 화상 처리를 하고 싶었기 때문에 Swift에서 OpenCV를 사용하는 방법을 조사했으므로 그 메모.
필요한 것
・Xcode
· OpneCV 프레임 워크 (아래 링크에서 임의 버전을 DL)
· OpenCV 공식 사이트
・추천은 3.x계
· 화상 처리에 대한 열의
구현 방법
1. 프레임워크를 부수기
방금 다운로드 한 프레임 워크를 OpneCV를 사용하려는 프로젝트 폴더에 던집니다.
그런 다음 "Copy items if needed"를 선택하십시오.
2. 코드를 작성하는 파일 작성
OpenCV를 작성하기위한 파일을 만듭니다.
"⌘ + N"또는 "File"→ "New"→ "File ..."에서 다음과 같은 화면이 나타납니다.
그리고 "Cocoa Touch Class"를 선택하고 "Next"
클래스 이름은 무엇이든 좋지만, Subclass는 「NSObject」, Language는 「Objective-C」를 선택해 「Next」
파일을 임의의 장소에 「Create」하면, 다음의 메세지가 나오므로 「Creat
e Bridging Header를 선택하여 Objective-C의 브리지 헤더 만들기(bridging header에 대한 자세한 설명은 생략)
다음과 같이 세 개의 파일이 생성됩니다.
opencvTest-Bridging-Header.h를 선택하여 opnecvWrapper.h를 가져옵니다.
이런 느낌.
3. 확장자 변경
Objective-C와 C++를 사용하기 때문에 "opencvWrapper.m"을 "opencvWrapper.mm"로 변경.
↓
4. 헤더 파일 가져오기
OpenCV 헤더 파일을 "opnecvWrapper.mm"에 추가
이것으로 OpenCV를 사용할 준비가 완료되었습니다.
5. 시험에 뭔가 해본다
이제 우리는 뭔가 일찍 이미지 처리를 시도합니다.
이번에는 바삭 바삭한 이미지의 그레이 스케일 화.
그레이 스케일화 정도라면 Swift만으로도 가능하지만 이번에는 동작 확인을 위해 해본다.
이미지는 예가 되어 레나씨.
6.storyboard 편집
UIImageView를 배치하여 레나를 표시하고 Button을 배치합니다.
연결을 잊지 않도록
7. 코드 작성
우선 "opnecvWrapper.h"에서
opencvWrapper.h#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface opencvWrapper : NSObject
//(返り値の型 *)関数名:(引数の型 *)引数名;
- (UIImage *)toGray:(UIImage *)input_img;
@end
#import < UIKit/UIKit.h >를 잊지 마세요! !
다음으로 "opencvWrapper.mm"편집
opencvWrapper.mm#import <opencv2/opencv.hpp>
//-------------------------------これも忘れずに書く
#import <opencv2/imgcodecs/ios.h> //---①
//-------------------------------
#import "opencvWrapper.h"
@implementation opencvWrapper
-(UIImage *)toGray:(UIImage *)input_img {
// 変換用Matの宣言
cv::Mat gray_img;
// input_imageをcv::Mat型へ変換
UIImageToMat(input_img, gray_img); //---②
cv::cvtColor(gray_img, gray_img, CV_BGR2GRAY); //---③
input_img = MatToUIImage(gray_img); //---④
return input_img; //---⑤
}
@end
① 이것이 없으면 UIImageToMat 등을 사용할 수 없다
② 인수의 input_img를 cv::Mat 형의 gray_img로 변환
③ gray_img를 RGB 이미지에서 그레이 스케일 이미지로 변환
④ cv::Mat형에서 UIImage형으로 변환하여 input_img에 넣는다.
⑤ ViewController.swift에 반환
마지막으로 "ViewController.swift"편집
ViewController.swiftimport UIKit
class ViewController: UIViewController {
//--------------------------OpenCVファイルのインポート
let openCV = opencvWrapper()
//--------------------------
// レナ嬢を表示するUIImageView
@IBOutlet var image : UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// グレースケール化ボタン
@IBAction func toGray() {
// UIImageViewに表示するUIImage
let gray_img : UIImage!
// gray_imgにグレースケール化したimageを入れる
gray_img = openCV.toGray(image.image) //---①
// imageにgray_imageを表示
image.image = gray_img //---②
}
}
① openWrapper의 toGray 함수에 UIImage에 표시된 이미지를 전달하고 반환 된 이미지를 gray_img에 넣습니다.
② 돌아온 gray_img를 UIImageView에 표시
8.완성도
OpenCV에서 이미지 처리를 수행하는 것이 확인되었습니다.
이상.
Reference
이 문제에 관하여(iPhone 앱에서 OpenCV (CocoaPods를 사용하지 않는 Ver)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tomoyuki_HAYAKAWA/items/1e214b21725f45269807
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
・Xcode
· OpneCV 프레임 워크 (아래 링크에서 임의 버전을 DL)
· OpenCV 공식 사이트
・추천은 3.x계
· 화상 처리에 대한 열의
구현 방법
1. 프레임워크를 부수기
방금 다운로드 한 프레임 워크를 OpneCV를 사용하려는 프로젝트 폴더에 던집니다.
그런 다음 "Copy items if needed"를 선택하십시오.
2. 코드를 작성하는 파일 작성
OpenCV를 작성하기위한 파일을 만듭니다.
"⌘ + N"또는 "File"→ "New"→ "File ..."에서 다음과 같은 화면이 나타납니다.
그리고 "Cocoa Touch Class"를 선택하고 "Next"
클래스 이름은 무엇이든 좋지만, Subclass는 「NSObject」, Language는 「Objective-C」를 선택해 「Next」
파일을 임의의 장소에 「Create」하면, 다음의 메세지가 나오므로 「Creat
e Bridging Header를 선택하여 Objective-C의 브리지 헤더 만들기(bridging header에 대한 자세한 설명은 생략)
다음과 같이 세 개의 파일이 생성됩니다.
opencvTest-Bridging-Header.h를 선택하여 opnecvWrapper.h를 가져옵니다.
이런 느낌.
3. 확장자 변경
Objective-C와 C++를 사용하기 때문에 "opencvWrapper.m"을 "opencvWrapper.mm"로 변경.
↓
4. 헤더 파일 가져오기
OpenCV 헤더 파일을 "opnecvWrapper.mm"에 추가
이것으로 OpenCV를 사용할 준비가 완료되었습니다.
5. 시험에 뭔가 해본다
이제 우리는 뭔가 일찍 이미지 처리를 시도합니다.
이번에는 바삭 바삭한 이미지의 그레이 스케일 화.
그레이 스케일화 정도라면 Swift만으로도 가능하지만 이번에는 동작 확인을 위해 해본다.
이미지는 예가 되어 레나씨.
6.storyboard 편집
UIImageView를 배치하여 레나를 표시하고 Button을 배치합니다.
연결을 잊지 않도록
7. 코드 작성
우선 "opnecvWrapper.h"에서
opencvWrapper.h#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface opencvWrapper : NSObject
//(返り値の型 *)関数名:(引数の型 *)引数名;
- (UIImage *)toGray:(UIImage *)input_img;
@end
#import < UIKit/UIKit.h >를 잊지 마세요! !
다음으로 "opencvWrapper.mm"편집
opencvWrapper.mm#import <opencv2/opencv.hpp>
//-------------------------------これも忘れずに書く
#import <opencv2/imgcodecs/ios.h> //---①
//-------------------------------
#import "opencvWrapper.h"
@implementation opencvWrapper
-(UIImage *)toGray:(UIImage *)input_img {
// 変換用Matの宣言
cv::Mat gray_img;
// input_imageをcv::Mat型へ変換
UIImageToMat(input_img, gray_img); //---②
cv::cvtColor(gray_img, gray_img, CV_BGR2GRAY); //---③
input_img = MatToUIImage(gray_img); //---④
return input_img; //---⑤
}
@end
① 이것이 없으면 UIImageToMat 등을 사용할 수 없다
② 인수의 input_img를 cv::Mat 형의 gray_img로 변환
③ gray_img를 RGB 이미지에서 그레이 스케일 이미지로 변환
④ cv::Mat형에서 UIImage형으로 변환하여 input_img에 넣는다.
⑤ ViewController.swift에 반환
마지막으로 "ViewController.swift"편집
ViewController.swiftimport UIKit
class ViewController: UIViewController {
//--------------------------OpenCVファイルのインポート
let openCV = opencvWrapper()
//--------------------------
// レナ嬢を表示するUIImageView
@IBOutlet var image : UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// グレースケール化ボタン
@IBAction func toGray() {
// UIImageViewに表示するUIImage
let gray_img : UIImage!
// gray_imgにグレースケール化したimageを入れる
gray_img = openCV.toGray(image.image) //---①
// imageにgray_imageを表示
image.image = gray_img //---②
}
}
① openWrapper의 toGray 함수에 UIImage에 표시된 이미지를 전달하고 반환 된 이미지를 gray_img에 넣습니다.
② 돌아온 gray_img를 UIImageView에 표시
8.완성도
OpenCV에서 이미지 처리를 수행하는 것이 확인되었습니다.
이상.
Reference
이 문제에 관하여(iPhone 앱에서 OpenCV (CocoaPods를 사용하지 않는 Ver)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tomoyuki_HAYAKAWA/items/1e214b21725f45269807
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface opencvWrapper : NSObject
//(返り値の型 *)関数名:(引数の型 *)引数名;
- (UIImage *)toGray:(UIImage *)input_img;
@end
#import <opencv2/opencv.hpp>
//-------------------------------これも忘れずに書く
#import <opencv2/imgcodecs/ios.h> //---①
//-------------------------------
#import "opencvWrapper.h"
@implementation opencvWrapper
-(UIImage *)toGray:(UIImage *)input_img {
// 変換用Matの宣言
cv::Mat gray_img;
// input_imageをcv::Mat型へ変換
UIImageToMat(input_img, gray_img); //---②
cv::cvtColor(gray_img, gray_img, CV_BGR2GRAY); //---③
input_img = MatToUIImage(gray_img); //---④
return input_img; //---⑤
}
@end
import UIKit
class ViewController: UIViewController {
//--------------------------OpenCVファイルのインポート
let openCV = opencvWrapper()
//--------------------------
// レナ嬢を表示するUIImageView
@IBOutlet var image : UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// グレースケール化ボタン
@IBAction func toGray() {
// UIImageViewに表示するUIImage
let gray_img : UIImage!
// gray_imgにグレースケール化したimageを入れる
gray_img = openCV.toGray(image.image) //---①
// imageにgray_imageを表示
image.image = gray_img //---②
}
}
Reference
이 문제에 관하여(iPhone 앱에서 OpenCV (CocoaPods를 사용하지 않는 Ver)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tomoyuki_HAYAKAWA/items/1e214b21725f45269807텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)