2018年7月8日日曜日

OpenCVを使う(覚書)

OpenCVはインテルが開発したオープンソースライブラリで、画像処理に定評があるという。
SOURCEFORGEというサイトで入手できる。

Swiftから使う方法

C++で書かれているらしく、Swiftから直接扱えないので、Objective-C++を経由して扱う。
簡単に書くと、

  • SwiftのプロジェクトにWrapper(間を取り持ってくれるクラスだ)となるObjective-Cのクラスを作る(ex. OpenCVWrapper.hと同.m)
  • その過程でSwiftとObjective-Cのクラスを同居させるためのBridging-Header.hを作る
  • Wrapperクラスとして作ったObjective-Cのファイル「クラス名.m」の拡張子を、Objective-C++の拡張子の「クラス名.mm」に変更
  • Bridging-Header.hに #import "OpenCVWrapper.h"
  • Wrapperクラスのヘッダファイルに #import <UIKit/UIKit.h>
  • Wrapperクラスの実装ファイル(さっき.mmにしたとこ)には以下のように
    • #import <opencv2/opencv.hpp>
    • #import <opencv2/imgcodecs/ios.h>
    • #import "OpenCVWrapper.h"
  • Wrapperクラスの中にOpenCVにアクセスするObjective-C++のメソッドを書き、Swiftからそのメソッドを使うことで機能を使用する
……らしい。
まだよくわかってないけど。

いっぱい出るWarningを消す

こんなのがいっぱい出た
Xcodeでそのままコンパイルしたら、
  • Not a Doxygen trailing comment
  • Empty paragraph passed to '@note' command
などというよくわからないWarningが86個も出てしまった。

気になるならここをNoに
stackoverflowでは「無視してもいいが、Build SettingsのDocumentation CommentsをNoにすればいい」とあったんで、試したらほんとに消えた。こちらのサイトでも。
iOS、Xcodeの必要なメッセージまで消えちゃうかどうかは知らん。

IplImageに変換せねば…

OpenCVで使われてる画像管理の構造体がIplImage。
iOSの画像をこいつに変換してやらないといろいろ使えないのが面倒。
調べたところ、CGImageからIplImageへの変換方法は一筋縄でいかず、Objective-C++でIplImageの変数とポインタを共有するContextを作ってそれに描画するとか、色空間を変換するとか、やたら複雑。
他のやり方がわからないので丸コピーするみたいな感じになってしまった。

0 件のコメント:

コメントを投稿