Wednesday, January 5, 2011

OpenCV and IOS

Very good material!
Thanks Yoshimasa Niwa.
http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en

// NOTE you SHOULD cvReleaseImage() for the return value when end of the code. - (IplImage *)CreateIplImageFromUIImage:(UIImage *)image {   // Getting CGImage from UIImage   CGImageRef imageRef = image.CGImage;    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();   // Creating temporal IplImage for drawing   IplImage *iplimage = cvCreateImage(     cvSize(image.size.width,image.size.height), IPL_DEPTH_8U, 4   );   // Creating CGContext for temporal IplImage   CGContextRef contextRef = CGBitmapContextCreate(     iplimage->imageData, iplimage->width, iplimage->height,     iplimage->depth, iplimage->widthStep,     colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault   );   // Drawing CGImage to CGContext   CGContextDrawImage(     contextRef,     CGRectMake(0, 0, image.size.width, image.size.height),     imageRef   );   CGContextRelease(contextRef);   CGColorSpaceRelease(colorSpace);    // Creating result IplImage   IplImage *ret = cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3);   cvCvtColor(iplimage, ret, CV_RGBA2BGR);   cvReleaseImage(&iplimage);    return ret; } 

Don’t forget release IplImage after using it by cvReleaseImage!

And creating UIImage from IplImage is like this.

// NOTE You should convert color mode as RGB before passing to this function - (UIImage *)UIImageFromIplImage:(IplImage *)image {   CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();   // Allocating the buffer for CGImage   NSData *data =     [NSData dataWithBytes:image->imageData length:image->imageSize];   CGDataProviderRef provider =     CGDataProviderCreateWithCFData((CFDataRef)data);   // Creating CGImage from chunk of IplImage   CGImageRef imageRef = CGImageCreate(     image->width, image->height,     image->depth, image->depth * image->nChannels, image->widthStep,     colorSpace, kCGImageAlphaNone|kCGBitmapByteOrderDefault,     provider, NULL, false, kCGRenderingIntentDefault   );   // Getting UIImage from CGImage   UIImage *ret = [UIImage imageWithCGImage:imageRef];   CGImageRelease(imageRef);   CGDataProviderRelease(provider);   CGColorSpaceRelease(colorSpace);   return ret; }

No comments:

Post a Comment