頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


iOSでOpenCVのサンプルが動かない

OpenCVでどんなことができるんだろうなってのをみたくて、
画像処理 — OpenCV-CookBook
↑このあたりのサンプルで面白そうなのを片っ端からiPhone実機でテストしてるんだけど、たまにiOS特有の問題か(?)うまく動いてくれないことがあるのよ。

(1)UIImageからcv::Matへの変換
K-meansによるピクセル値のクラスタリング(減色)
↑この項のサンプルが動かなくてどういうことだよ?ってコードを調べるとどうもUIImageをcv::Matに変換する部分がまずいっぽい。上記チュートリアルサイトは別にiOSに限ったわけではないので、その辺りは自分で適切にする必要があったのよね。
どうやらCV_8UC3の画像が必要なのにUIImageから変換する部分でCV_8UC4でメモリ確保してる。符号無し8ビットの4チャンネルってやつ。アルファチャンネルが不要だからそこだけ削除すればいいんだろうけど、、、どうすんのよ?って調べてみたらこんなページが。
objective c - CGBitmapContextCreate for CV_8UC3 (to use in OpenCV) - Stack Overflow
これを参考に
cv::cvtColor(img , img , CV_RGBA2RGB);
としてやればちゃんと動いてくれたよ。

(2)xmlファイルを読み込む
http://opencv.jp/cookbook/opencv_img.html#id40 顔を検出する
↑なぜかリンクを設定すると正常に表示されないので文字列だけ書いておくけど、、、
ここで分類器のxmlファイルを読み込む部分があるんだけど、どうやったらいいのかよくわらかず、、、
結局読み込みたいファイルをXcodeにドラッグ&ドロップして参照するようにして、こういう流れで。
{
    NSString* resDir = [[NSBundle mainBundle] resourcePath];
    const char *cascade_name = "haarcascade_frontalface_alt.xml";
    char cascade_path[PATH_MAX];
    sprintf(cascade_path, "%s/%s", [resDir cStringUsingEncoding:NSASCIIStringEncoding], cascade_name );
    cv::CascadeClassifier cascade;
    if(!cascade.load(cascade_path)) {
        NSLog(@"loading failed");
        return;
    }
}

<< 顔認識 OpenCV対CIDetector  TopPage  iPhoneの電話が使えなくなった >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/884-1abb887a




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad