UIImage与Iplimage相互转换

转载 2012年03月23日 14:19:52

UIImage与Iplimage相互转换

作者:知识天地  来源:博客园  发布时间:2012-02-27 15:43  阅读:48 次  原文链接   [收藏]  

原创文章,转载请注明出处: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吧~

ios–OpenCV–IplImage与UIImage类型相互转换

/// UIImage类型转换为IPlImage类型 -(IplImage*)convertToIplImage:(UIImage*)image { CGImageRef imageRef =...
  • yishengzhiai005
  • yishengzhiai005
  • 2016年04月27日 15:09
  • 1001

opencv在iOS中的使用[几个滤波]以及uiimage与iplimage互转

最近由于项目需要用到美颜,因此初步使用了opencv进行了研究,思路如下: 1 使用滤波,可以采用双边滤波或者高斯滤波; 2 肤色检测; 3 图像的融合,即1和2点融合; 4 锐化增强细节...
  • tuyooc
  • tuyooc
  • 2016年03月31日 10:13
  • 845

opencv UIimage,cvmat 和IplImage的相互转换

1.opencv UIimage转换cvmat+ (cv::Mat)cvMatFromUIIMage:(UIImage *)image { @synchronized (image) { ...
  • yutaotst
  • yutaotst
  • 2016年12月08日 14:24
  • 1049

UIImage和IplImage之间的相互转换

Converting images between UIImage and IplImage This content is copied from Yoshimasa's ...
  • Koupoo
  • Koupoo
  • 2012年05月28日 16:04
  • 723

Iplimage 与 Mat 间的转换

将Mat转换为IplImage //! converts header to IplImage; no data is copied operator IplImage() const; ...
  • hyqsong
  • hyqsong
  • 2015年10月23日 21:30
  • 964

CVImageBufferRef转UIImage

CVImageBufferRef imageBuffer =  CMSampleBufferGetImageBuffer(sampleBuffer);          CVPixelBufferLo...
  • yhf_szb
  • yhf_szb
  • 2016年03月20日 22:25
  • 1787

IplImage与BMP相互转换

在windows编程中,很多图片信息,都是基于windows系统所谓的DIB(设备无关位图)的结构,其定义在结构体 BITMAPINFOHEADER 中。本方法可以讲 windows 定义的DIB 结...
  • utimes
  • utimes
  • 2014年04月06日 14:13
  • 1448

BMP与IplImage相互转换

下面的function 可以把 IplImage 转 Bitmap///////////////////////////////////////////////////////////////////...
  • eva1988725
  • eva1988725
  • 2011年02月27日 20:32
  • 2183

Mat与IplImage相互转换

原文地址:http://blog.csdn.net/lichengyu/article/details/24272349 Mat 类有一个IplImage()运算符成员函数: [cp...
  • zr459927180
  • zr459927180
  • 2016年03月22日 14:19
  • 795

IplImage与Bitmap相互转换

Drawable drawable = idToDrawable(R.drawable.p4); Bitmap bitmap = this.drawableToBitmap(drawa...
  • tiananma0607
  • tiananma0607
  • 2016年08月19日 15:13
  • 210
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UIImage与Iplimage相互转换
举报原因:
原因补充:

(最多只允许输入30个字)