OpenCVで画像データの「UIImageオブジェクト」を使用するには、OpenCV独自に用意されている「IpIImage」構造体に変換する必要があります。つまりOpenCVでは「UIImageオブジェクト」そのままでは使用できません。必ず「IpIImage」へ変換する作業が発生します。
// NOTE 戻り値は利用後cvReleaseImage()で解放してください
- (IplImage *)CreateIplImageFromUIImage:(UIImage *)image {
// CGImageをUIImageから取得
CGImageRef imageRef = image.CGImage;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
// 一時的なIplImageを作成
IplImage *iplimage = cvCreateImage(
cvSize(image.size.width,image.size.height), IPL_DEPTH_8U, 4
);
// CGContextを一時的なIplImageから作成
CGContextRef contextRef = CGBitmapContextCreate(
iplimage->imageData, iplimage->width, iplimage->height,
iplimage->depth, iplimage->widthStep,
colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault
);
// CGImageをCGContextに描画
CGContextDrawImage(
contextRef,
CGRectMake(0, 0, image.size.width, image.size.height),
imageRef
);
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);
// 最終的なIplImageを作成
IplImage *ret = cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3);
cvCvtColor(iplimage, ret, CV_RGBA2BGR);
cvReleaseImage(&iplimage);
//戻り値のIplImageは利用後にcvReleaseImageで解放
return ret;
}
// NOTE IplImageは事前にRGBモードにしておいてください。
- (UIImage *)UIImageFromIplImage:(IplImage *)image {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
// CGImageのためのバッファを確保
NSData *data =
[NSData dataWithBytes:image->imageData length:image->imageSize];
CGDataProviderRef provider =
CGDataProviderCreateWithCFData((CFDataRef)data);
// IplImageのデータからCGImageを作成
CGImageRef imageRef = CGImageCreate(
image->width, image->height,
image->depth, image->depth * image->nChannels, image->widthStep,
colorSpace, kCGImageAlphaNone|kCGBitmapByteOrderDefault,
provider, NULL, false, kCGRenderingIntentDefault
);
// UIImageをCGImageから取得
UIImage *ret = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return ret;
}
画像処理で良く行われるグレースケース化。カラー写真をモノクロ写真に変換する時に
OpenCV使用時の表色系に関して。iPhoneで撮影した画像はRGBです。O
OpenCVで画像データの「UIImageオブジェクト」を使用するには、Ope
iPhone・iPadアプリ開発時、UIViewやそのサブクラスで位置とサイズ
iPhoneアプリ開発で「カメラで撮影した・フォトライブラリから選択した画像」
iPhone・iPadアプリ開発時「Xcode」を使用して、新規プロジェクトフ
iPhone・iPadアプリ開発時に「UI(インターフェース)」を設計する為の
GUIデザインに使用できそうなフリーアイコン。iPhoneアプリ・iPadアプ