追記(2009/9/19):入出力の扱いはこっちがただしいかも.
追記(2009/3/1):入出力の扱いはこっちがただしいかも.
追記(2009/2/15):
コロッと書くのを忘れていたが,出力部に関してはこちらを参照のこと!.
追記(2008/10/16):
修正してみた.
追記(2008/10/03):
OpenCVをMacにいれるのはこちらの"やったこと/1.OpenCVを入れる"を参照してください.
という例にならんかな.まぁ前のエントリの勢いなだけです.
これ.
ポートレートのオリジナルはこちら(Photo by Joi)
ただ,この機能はそれなりに重たいので画像をクリックして右下をみてもらいたいのですが
0.84 FPS….
それだけ.
以下記録.
1.ライブラリを入れる
zlib同様に/opt/local/libを開いてDnDしておく.> pkg-config --cflags opencv --libs opencvの結果からとりあえず
-I/opt/local/include/opencv -L/opt/local/lib -lcxcore -lcv -lhighgui -lcvaux -lml
>libcv.dylib, libcxcore.dylib, libcvaux.dylib, libml.dylib, libhighgui.dylibあたりになる.
2.ヘッダファイルの検索先を指定するプロジェクトの情報/ビルド(タブ)/検索パス/ヘッダ検索パスに/opt/local/include/opencvを追加する.
3.アーキーテクチャを指定する
portsがどうしているかわからないけどとりあえず自身のアーキテクチャしかどうにもできないらしい.(っていうかOpenCVが入れられるのがIntelのみなのかもしれない.)
ので,プロジェクトの情報/ビルド(タブ)/アーキテクチャ/アーキテクチャをNative Architecture of Build Machineに切り替えておく.
4.画像の入出力まわり
あってるかわからんがこんな感じ.IplImageへの複写(ボールド体部)はほんとにこれでいいか不明で不安.
...
@interface OpenCV_FaceDetectorPlugIn : QCPlugIn
{
...
}
...
@property(assign) id<QCPlugInInputImageSource> inputSourceImage;
@property(assign) id<QCPlugInOutputImageProvider> outputResultImage;
...
@end
//---------------------------------------------------------
...
@implementation OpenCV_FaceDetectorPlugIn
@dynamic inputSourceImage, outputResultImage;
...
- (BOOL) execute:(id<QCPlugInContext>)context atTime:(NSTimeInterval)time withArguments:(NSDictionary*)arguments
{
id<QCPlugInInputImageSource> image= self.inputSourceImage;
if (!image) {
return YES;
}
[image lockBufferRepresentationWithPixelFormat:QCPlugInPixelFormatBGRA8
colorSpace:[image imageColorSpace]
forBounds:[image imageBounds]];
void *p= malloc([image bufferBytesPerRow]*[image bufferPixelsHigh]);
memcpy(p, [image bufferBaseAddress], [image bufferBytesPerRow] * [image bufferPixelsHigh]);
IplImage *src_img = calloc(1, sizeof(IplImage));
{
src_img->nSize = sizeof(IplImage);
src_img->ID = 0;
src_img->nChannels = 4;
src_img->depth = IPL_DEPTH_8U;
src_img->dataOrder = 0;
src_img->origin = 0;
src_img->width = [image bufferPixelsWide];
src_img->height = [image bufferPixelsHigh];
src_img->roi = NULL;
src_img->maskROI = NULL;
src_img->imageData = p;
src_img->widthStep = [image bufferBytesPerRow];
src_img->imageDataOrigin= p;
}
[image unlockBufferRepresentation];
//op.
self.outputResultImage=
[context outputImageProviderFromBufferWithPixelFormat:QCPlugInPixelFormatBGRA8
pixelsWide:src_img->width
pixelsHigh:src_img->height
baseAddress:src_img->imageData
bytesPerRow:src_img->widthStep
releaseCallback:_BufferReleaseCallback
releaseContext:NULL
colorSpace:[image imageColorSpace]
shouldColorMatch:NO];
return YES;
}
...
@end
5.リソースへのアクセス(パスの取得)NSBundle* mainBundle = [NSBundle bundleWithIdentifier:@"com.yourcompany.OpenCV_FaceDetector"];
const char *cascade_name = [[mainBundle pathForResource:@"haarcascade_frontalface_default" ofType:@"xml"] UTF8String];
Identifierはプロジェクト内のInfo.plistにある"Bundle identifier"参照.
参考:こちらとかもスナップが豊富で参考になる.XcodeでOpenCV開発 - MineAPの(開発)日記
http://d.hatena.ne.jp/MineAP/20080112/1200125226
0 件のコメント:
コメントを投稿