2011/08/18
2011/08/16
OpenCVで顔検出してリアルタイムモザイク
もはや定番となってますが、顔検出のサンプルコード "
本格的な画像処理や画像認識の機能をお手軽に試せてしまうの楽しい。
すごいぞ、OpenCV!;-)
モザイクかけるだけで何やら怪しい雰囲気になるなw
samples/c/facedetect.cpp
" をベースに、検出された顔の領域にモザイクをかけるようにしてみた。コードはgist:1148913へ。
本格的な画像処理や画像認識の機能をお手軽に試せてしまうの楽しい。
すごいぞ、OpenCV!;-)
モザイクかけるだけで何やら怪しい雰囲気になるなw
2011/08/15
OSX Lion (MacBook Air - Mid 2011) 上の Xcode4.1 で OpenCV2.2 を使えるようにする
MacBook Air (Mid 2011) で OpenCV を使ったコードを動かすまでのメモ。
手順は以下のとおり。
インストールが終わったら、一応アップデートしておく。
というわけで、C でこんなコードを書いて動かしてみると、、、
手順は以下のとおり。
[1] Xcode をインストール
AppStore で検索&クリック。あとは待つだけ。[2] MacPorts をインストール
公式サイトから Lion 用のイメージをダウンロードしてきてインストール。インストールが終わったら、一応アップデートしておく。
$ sudo port selfupdate
[3] OpenCV をインストール
MacPorts を使ってしまえばコマンド一発。時間はかなりかかる。$ sudo port install opencv
[4] Xcode のプロジェクト設定
ポイントは3つ。- 「Valid Architectures」を"x86_64"のみにする。
※"i386"を含めたままでは、ビルドでエラーが出た。 - 「Header Search Paths」に"/opt/local/include"を追加。
- 「Other Linker Flags」に必要なライブラリのパスを追加。例えば、以下の3つ。
- "/opt/local/lib/libopencv_core.2.2.0.dylib"
- "/opt/local/lib/libopencv_highgui.2.2.0.dylib"
- "/opt/local/lib/libopencv_imgproc.2.2.0.dylib"
というわけで、C でこんなコードを書いて動かしてみると、、、
#include <opencv/cv.h> #include <opencv/highgui.h> IplImage* doCvGray(IplImage* in); IplImage* doCanny(IplImage* in, double lowThresh, double highThresh, double aperture); int main (int argc, const char * argv[]) { cvNamedWindow ("Capture", CV_WINDOW_AUTOSIZE); cvNamedWindow ("Edge", CV_WINDOW_AUTOSIZE); CvCapture *capture = cvCreateCameraCapture(0); assert(capture != NULL); IplImage *frame = 0; IplImage *out = 0; int c; while (1) { frame = cvQueryFrame (capture); out = doCvGray(frame); out = doCanny(out, 10, 100, 3); cvShowImage("Capture", frame); cvShowImage("Edge", out); cvReleaseImage(&out); c = cvWaitKey (2); if (c == '\x1b') break; } cvReleaseCapture (&capture); cvDestroyWindow ("Capture"); cvDestroyWindow ("Edge"); return 0; } IplImage* doCvGray(IplImage* in){ IplImage* out = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1); cvCvtColor(in, out, CV_BGR2GRAY); return out; }; IplImage* doCanny(IplImage* in, double lowThresh, double highThresh, double aperture){ IplImage* out = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1); cvCanny(in, out, lowThresh, highThresh, aperture); return out; };はい、エッジ検出できておりますw
登録:
投稿 (Atom)