ios opencv图片处理_openCV(二)---iOS中使用openCV的图片格式转换

//由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构。

- (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;

}

- (UIImage *)UIImageFromIplImage:(IplImage *)image {

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

// Allocating the buffer for CGImage

NSData *data =

[NSData dataWithBytes:image->imageData length:image->imageSize];

CGDataProviderRef provider =

CGDataProviderCreateWithCFData((__bridge 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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值