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相互转换相关推荐
- Mat与IplImage相互转换
1.CvMat之间的复制 //注意:深拷贝 - 单独分配空间,两者相互独立 CvMat* a; CvMat* b = cvCloneMat(a); //copy a to b 2.Mat之间的 ...
- OpenCV3.0中 Mat和IplImage相互转换
//IplImage->Mat //EXAMPLE: //浅拷贝: IplImage* pBinary=cvLoadImage("c://temp.jpg",0); Mat ...
- OpenCV常见的优化方法和技巧总结
OpenCV常见的优化方法和技巧总结 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/78540206 目录 OpenCV常 ...
- linux opencv 人脸识别,iOS下 基于OpenCV实现的人脸识别匹配
OpenCV是什么 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函 ...
- OpenCV之CvMat Mat IplImage之间相互转换
下面是亲测的: IplImage* iplimg = cvLoadImage("heels.jpg"); cv::Mat matimg; cvConvert(matimg,ipli ...
- IplImage, CvMat, Mat 的关系和相互转换 再次理解 /(ㄒoㄒ)/~~
opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化. ...
- IplImage, CvMat, Mat 的关系和相互转换(转)
opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化. ...
- opencv 内存数据转matlab,OpenCV:IplImage, CvMat, Mat 相互转换
cv::Mat cv::Mat preMat; //第一种转换方式 IplImage imgIpl1 = preMat; //第二种转换方式 IplImage imgIpl2 = preMat.ope ...
- IplImage与BMP相互转换
在windows编程中,很多图片信息,都是基于windows系统所谓的DIB(设备无关位图)的结构,其定义在结构体 BITMAPINFOHEADER 中. 将windows 定义的DIB 结构和Ope ...
最新文章
- 黑洞最新照片来了:只多了炫酷光纹,却让物理学家解开喷流大谜题
- c语言如何让函数一直执行,C语言如何实现在每天某个特定时间执行某个函数?
- php概率计算_php 抽奖概率算法
- JavaScript 实现继承的5种方式
- 3 WM配置-主数据-定义仓库编号的控制参数
- 企业库4.0 2008年3月发布的CTP
- 氢气露点和湿度换算_如何创建氢气鼓组以获取乐趣和收益
- 基于JAVA+SpringMVC+Mybatis+MYSQL的家校通管理系统
- ArcGIS Desktop软件安装和试用说明
- 【深度优先搜索/树】计蒜客:族谱
- Hive建表与数据加载
- GPU GEMS 3 EBOOK下载
- 板邓:wordpress编辑器发布文章自动首行缩进
- 广东省30m二级分类土地利用数据(矢量)
- TypeError: Fetch argument has invalid type class ‘numpy.float32‘, must be a string or Tensor
- git mac 可视化diff_Git可视化比较工具P4Merge
- python联合vrep_vrep-python 控制方法
- 学习笔记 JavaScript ES6 声明方式const(二)
- ESP分区和MSR分区下怎么重做GHOST系统
- 计算机服务器安装系统安装教程,服务器如何安装系统,教您如何安装
热门文章
- win7装64位oracle和PLSQL
- 河南acret计算机报名,Acret, Ex Parte U.S. Supreme Court Transcript of Record with Supporting Pleadings...
- linux中mfsort用法,Linux命令――sort
- Excel关于使用图形的妙招技法
- 编译x86架构的openwrt系统,让笔记本从u盘启动openwrt
- 人工智能学习体系大纲(src:http://blog.sina.com.cn/s/blog_7dbb766f0102xdwu.html)
- C语言数据结构学习用单元测试
- placeholder的兼容处理(jQuery下)
- postgresql中表的继承及分区表(四)
- 浏览器的内核及版本的判断