UIImage与Iplimage相互转换
原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處:http://www.cnblogs.com/mfryf/archive/2012/02/27/2369952.html?
Opencv中所有的圖像處理都是Iplimage類(lèi)型的格式,iso的sdk顯示一張圖像的對(duì)象類(lèi)型是UIImage。因此,我們?nèi)绻朐趇os環(huán)境中使用opencv,
就必須把UIImage轉(zhuǎn)換成Iplimage,處理之后再把Iplimage轉(zhuǎn)換成UIImage。非常幸運(yùn)的是,IOS的sdk為我們提供了轉(zhuǎn)換API。
從UIImage創(chuàng)建一個(gè)Iplimage結(jié)構(gòu),代碼如下:
// 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;
}
使用玩iplimage之后,別忘記釋放內(nèi)存。cvreleaseImage().
從iplimage創(chuàng)建一張UIImage
代碼如下:
// 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;
}
盡情的在ios中使用opencv吧~
總結(jié)
以上是生活随笔為你收集整理的UIImage与Iplimage相互转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Deep Learning for Br
- 下一篇: 仿生学模型设想