iPhone&Androidプログラミング記
英語─上達しないのは努力不足が原因ではなかった!
英語が話せない…を解決する博士開発の噂の英語教材!返品保証付!

2009年04月07日

iPhoneでOpenCVを使えるようにする(5)

iPhoneで使われるUIImageとOpenCVで使われるIplImageの相互変換についてです。

少々気を付けないといけない事もありますが、簡単に出来ます。

まずはUIImageからIplImageにする場合です。

- (IplImage *)ToIplImage:(UIImage *)image
{
CGImageRef imageRef = image.CGImage;
IplImage *iplimage;
iplImage = cvCreateImage(cvSize(image.size.width, image.size.height),
IPL_DEPTH_8U, 4);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef contextRef;
contextRef = CGBitmapContextCreate(
iplimage->imageData,
iplimage->width,
iplimage->height,
iplimage->depth,
iplimage->widthStep,
colorSpace,
kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault);
CGContextDrawImage(contextRef,
CGRectMake(0, 0, image.size.width, image.size.height),
imageRef);
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);

IplImage *ret = cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3);
cvCvtColor(iplimage, ret, CV_RGBA2BGR);
cvReleaseImage(&iplimage);

return ret;
}


渡されたUIImaageからCGImageを作成する。
渡された画像のイメージサイズでIplImageを作成する。
UIImageはRGBAの4チャンネルなので、IplImageを作成する時も4チャンネルの指定で作成します。

Contextを作成するためのColorspaceを作成する。
Contextを作成します。
第1引数にIplImageのデータを指すポインタを指定する事で画像の書き出し先がIplImageになります。

作成したContextに対して渡された画像を描画する。

IplImageに描かれたので、ColorspaceとContextはReleaseする。

OpenCVではRGBAではなくBGRで扱う方がいいので、BGRへと変換していきます。
変換元と変換先のポインタの書式が合っていないと変換出来ないので、BGR用のImageを作成して変換しないといけません。

不要になったIplImageはReleaseする。
続きを読む


posted by ラキシス at 17:24 | Comment(0) | TrackBack(0) | OpenCV + iPhone | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。