UIImage与Iplimage相互转换
来源:互联网 发布:社交网络界面设计 pdf 编辑:程序博客网 时间:2024/04/30 07:21
UIImage与Iplimage相互转换
原创文章,转载请注明出处:http://www.cnblogs.com/mfryf/archive/2012/02/27/2369952.html
Opencv中所有的图像处理都是Iplimage类型的格式,iso的sdk显示一张图像的对象类型是UIImage。因此,我们如果想在ios环境中使用opencv,
就必须把UIImage转换成Iplimage,处理之后再把Iplimage转换成UIImage。非常幸运的是,IOS的sdk为我们提供了转换API。
从UIImage创建一个Iplimage结构,代码如下:
// 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之后,别忘记释放内存。cvreleaseImage().
从iplimage创建一张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吧~
- UIImage与Iplimage相互转换
- ios--OpenCV--IplImage与UIImage类型相互转换
- ios–OpenCV–IplImage与UIImage类型相互转换
- UIImage和IplImage之间的相互转换
- BMP与IplImage相互转换
- BMP与IplImage相互转换
- BMP与IplImage相互转换
- BMP与IplImage相互转换
- IplImage与BMP相互转换
- BMP与IplImage相互转换
- Mat与IplImage相互转换
- IplImage与Bitmap相互转换
- opencv UIimage,cvmat 和IplImage的相互转换
- IplImage 与 CBitmap类 的相互转换
- IplImage 与 CBitmap类 的相互转换
- DIB与IplImage图像格式的相互转换
- IplImage 与 CBitmap类 的相互转换
- OpenCV的IplImage与BMP相互转换
- logcat用法
- Sed 命令
- u-boot reset命令分析
- git
- iPhone开发笔记 (5) scrollView和pageControl的搭配使用
- UIImage与Iplimage相互转换
- 台湾_论文_查找
- 【POI】 WorkbookFactory类找不到
- 2012中国保险十大追问:中国保险还剩多少精华
- list内存分页、截取
- String,StringBuffer,StringBuilder
- WIN7系统工具大全
- Android基础教程(二)之五大布局对象---FrameLayout,LinearLayout ,AbsoluteLayout,RelativeLayout,TableLayout.
- 我来告诉你为什么叫“ITIL”?