原创文章,转载请注明出处: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相互转换相关推荐

  1. Mat与IplImage相互转换

    1.CvMat之间的复制 //注意:深拷贝 - 单独分配空间,两者相互独立  CvMat* a;  CvMat* b = cvCloneMat(a);   //copy a to b 2.Mat之间的 ...

  2. OpenCV3.0中 Mat和IplImage相互转换

    //IplImage->Mat //EXAMPLE: //浅拷贝: IplImage* pBinary=cvLoadImage("c://temp.jpg",0); Mat ...

  3. OpenCV常见的优化方法和技巧总结

    OpenCV常见的优化方法和技巧总结 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/78540206 目录 OpenCV常 ...

  4. linux opencv 人脸识别,iOS下 基于OpenCV实现的人脸识别匹配

    OpenCV是什么 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函 ...

  5. OpenCV之CvMat Mat IplImage之间相互转换

    下面是亲测的: IplImage* iplimg = cvLoadImage("heels.jpg"); cv::Mat matimg; cvConvert(matimg,ipli ...

  6. IplImage, CvMat, Mat 的关系和相互转换 再次理解 /(ㄒoㄒ)/~~

    opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化. ...

  7. IplImage, CvMat, Mat 的关系和相互转换(转)

    opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化. ...

  8. opencv 内存数据转matlab,OpenCV:IplImage, CvMat, Mat 相互转换

    cv::Mat cv::Mat preMat; //第一种转换方式 IplImage imgIpl1 = preMat; //第二种转换方式 IplImage imgIpl2 = preMat.ope ...

  9. IplImage与BMP相互转换

    在windows编程中,很多图片信息,都是基于windows系统所谓的DIB(设备无关位图)的结构,其定义在结构体 BITMAPINFOHEADER 中. 将windows 定义的DIB 结构和Ope ...

最新文章

  1. 黑洞最新照片来了:只多了炫酷光纹,却让物理学家解开喷流大谜题
  2. c语言如何让函数一直执行,C语言如何实现在每天某个特定时间执行某个函数?
  3. php概率计算_php 抽奖概率算法
  4. JavaScript 实现继承的5种方式
  5. 3 WM配置-主数据-定义仓库编号的控制参数
  6. 企业库4.0 2008年3月发布的CTP
  7. 氢气露点和湿度换算_如何创建氢气鼓组以获取乐趣和收益
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的家校通管理系统
  9. ArcGIS Desktop软件安装和试用说明
  10. 【深度优先搜索/树】计蒜客:族谱
  11. Hive建表与数据加载
  12. GPU GEMS 3 EBOOK下载
  13. 板邓:wordpress编辑器发布文章自动首行缩进
  14. 广东省30m二级分类土地利用数据(矢量)
  15. TypeError: Fetch argument has invalid type class ‘numpy.float32‘, must be a string or Tensor
  16. git mac 可视化diff_Git可视化比较工具P4Merge
  17. python联合vrep_vrep-python 控制方法
  18. 学习笔记 JavaScript ES6 声明方式const(二)
  19. ESP分区和MSR分区下怎么重做GHOST系统
  20. 计算机服务器安装系统安装教程,服务器如何安装系统,教您如何安装

热门文章

  1. win7装64位oracle和PLSQL
  2. 河南acret计算机报名,Acret, Ex Parte U.S. Supreme Court Transcript of Record with Supporting Pleadings...
  3. linux中mfsort用法,Linux命令――sort
  4. Excel关于使用图形的妙招技法
  5. 编译x86架构的openwrt系统,让笔记本从u盘启动openwrt
  6. 人工智能学习体系大纲(src:http://blog.sina.com.cn/s/blog_7dbb766f0102xdwu.html)
  7. C语言数据结构学习用单元测试
  8. placeholder的兼容处理(jQuery下)
  9. postgresql中表的继承及分区表(四)
  10. 浏览器的内核及版本的判断