UIImage和IplImage之间的相互转换
来源:互联网 发布:centos smb unrec 编辑:程序博客网 时间:2024/05/21 11:05
Converting images between UIImage and IplImage
This content is copied from Yoshimasa's blog.
Converting images between UIImage and IplImage
OpenCV is using IplImage structure for processing, and iPhone SDK using UIImage object to display it on the screen. This means, we need a converter between UIImage and IplImage. Thankfully, we can do with iPhone SDK APIs.
Creating IplImage from UIImage is like this.
// 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;}
- UIImage和IplImage之间的相互转换
- opencv UIimage,cvmat 和IplImage的相互转换
- UIImage与Iplimage相互转换
- CvMat、IplImage和Mat之间的相互转换(精华)
- CvMat、 CvArr、Mat、IplImage和Mat之间的相互转换
- Mat与IplImage和CvMat之间的相互转换
- CvMat、IplImage和Mat之间的相互转换
- CvMat、IplImage和Mat之间的相互转换(精华)
- Mat与Iplimage之间的相互转换
- NSData与UIImage之间的相互转换
- IplImage和Mat间的相互转换
- IplImage和cv::Mat的相互转换
- Opencv读取mat和cvMat元素&&Mat与IplImage和CvMat类型之间的相互转换
- UIColor和UIImage的相互转换
- OpenCV中Mat与IplImage和CvMat类型之间的相互转换
- OpenCV中Mat与IplImage和CvMat类型之间的相互转换
- OpenCV中Mat与IplImage和CvMat类型之间的相互转换
- OPENCV中MAT与IPLIMAGE和CVMAT类型之间的相互转换
- switch case中的定义
- Selenium用户指南 - 第三章 Selenium IDE[5]
- Android开发中实现多点触摸的方法
- C++设计模式之五:SINGLETON(单件模式)
- 显示内容太多用...显示的SQL语句
- UIImage和IplImage之间的相互转换
- linux中pipe_rw.c的详解
- UIPanGestureRecognizer手势影响UISlider拖动的问题及解决办法
- SSDT HOOK的框架
- Selenium用户指南 - 第三章 Selenium IDE[6]
- 3、计时器的使用
- Android中Parcel机制
- Selenium用户指南 - 第四章 Selenium 2.0和WebDriver[1]
- 没有为扩展名“.gif”注册的生成提供程序