UIImage與Iplimage相互轉換
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吧~
相關文章
- DataTable與List相互轉換
- SDOM與QDOM相互轉換
- string與數字相互轉換
- JSON字串與HashMap相互轉換JSON字串HashMap
- java 物件與xml相互轉換Java物件XML
- 陣列與字串方法與相互轉換陣列字串
- string與char陣列相互轉換陣列
- java 字串與檔案相互轉換Java字串
- pandas中dataframe與dict相互轉換
- opencv mat轉IplImage*OpenCV
- xml與陣列的相互轉換——phpXML陣列PHP
- jQuery 物件 與 原生 DOM 物件 相互轉換jQuery物件
- 將UIView轉成UIImage,將UIImage轉成PNG/JPGUIView
- 旋轉矩陣與尤拉角的相互轉換矩陣
- 塊級元素與內聯元素相互轉換
- JavaScript陣列與字串相互轉換 join、splitJavaScript陣列字串
- mysql時間與字串之間相互轉換MySql字串
- Python字典格式與JSON格式的相互轉換PythonJSON
- js時間戳與日期格式的相互轉換JS時間戳
- android中String與InputStream之間的相互轉換方式Android
- c語言字串與整形,浮點數...相互轉換C語言字串
- Apple開發_NSImage與CIImage之間的相互轉換APP
- Hive日期、時間轉換:YYYY-MM-DD與YYYYMMDD;hh.mm.ss與hhmmss的相互轉換HiveHMM
- C 語言整數與字串的相互轉換介紹字串
- JS實現JSON物件與URL引數的相互轉換JSON物件
- Blob實現與File DataURL canvas相互轉換示例詳解Canvas
- JavaScript全形和半形相互轉換JavaScript
- (C#)時間戳、DateTime相互轉換C#時間戳
- C#:檔案、byte[]、Stream相互轉換C#
- 原碼,反碼,補碼相互轉換
- json與字典的相互轉化JSON
- 內聯元素和塊級元素相互轉換
- Python 漢字區位碼、字串 相互轉換Python字串
- HTML元素的分類,特性以及相互轉換HTML
- [顏色進位制轉換]js實現rgb和hex的相互轉換JS
- 判斷迴文串 字串/數字相互轉換字串
- 中文數字阿拉伯數字相互轉換
- PostgreSQL中將物件oid和物件名相互轉換SQL物件