iOS 下使用 OpenCV 实现图像处理
来源:互联网 发布:淘宝怎么提高收藏宝贝 编辑:程序博客网 时间:2024/05/28 23:11
i iOS 下使用 OpenCV 实现图像处理
目的
在这个教程中我们将学习如何在 iOS 上用 OpenCV 实现基本的图像处理。
介绍
在 OpenCV 中所有的图像处理操作一般是基于 Mat 结构来进行的。而 iOS 上要在屏幕上显示图片用的是 UIImage 控件实现。为了将 OpenCV Mat 转成 UIImage 我们需要用到 Core Graphics 框架。下面的代码用来在 Mat 和 UIImage 对象之间进行转换。
- (cv::Mat)cvMatFromUIImage:(UIImage *)image{ CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage); CGFloat cols = image.size.width; CGFloat rows = image.size.height; cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels (color channels + alpha) CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to data cols, // Width of bitmap rows, // Height of bitmap 8, // Bits per component cvMat.step[0], // Bytes per row colorSpace, // Colorspace kCGImageAlphaNoneSkipLast | kCGBitmapByteOrderDefault); // Bitmap info flags CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage); CGContextRelease(contextRef); return cvMat;}
- (cv::Mat)cvMatGrayFromUIImage:(UIImage *)image{ CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage); CGFloat cols = image.size.width; CGFloat rows = image.size.height; cv::Mat cvMat(rows, cols, CV_8UC1); // 8 bits per component, 1 channels CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to data cols, // Width of bitmap rows, // Height of bitmap 8, // Bits per component cvMat.step[0], // Bytes per row colorSpace, // Colorspace kCGImageAlphaNoneSkipLast | kCGBitmapByteOrderDefault); // Bitmap info flags CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage); CGContextRelease(contextRef); return cvMat; }
处理完毕之后我们需要将其转回 UIImage。下面的代码可处理灰度和彩色图像转换(根据if 语句中对 channles 的数量进行判断)
cv::Mat greyMat;cv::cvtColor(inputMat, greyMat, CV_BGR2GRAY);
After the processing we need to convert it back to UIImage.
-(UIImage *)UIImageFromCVMat:(cv::Mat)cvMat{ NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize()*cvMat.total()]; CGColorSpaceRef colorSpace; if (cvMat.elemSize() == 1) { colorSpace = CGColorSpaceCreateDeviceGray(); } else { colorSpace = CGColorSpaceCreateDeviceRGB(); } CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); // Creating CGImage from cv::Mat CGImageRef imageRef = CGImageCreate(cvMat.cols, //width cvMat.rows, //height 8, //bits per component 8 * cvMat.elemSize(), //bits per pixel cvMat.step[0], //bytesPerRow colorSpace, //colorspace kCGImageAlphaNone|kCGBitmapByteOrderDefault,// bitmap info provider, //CGDataProviderRef NULL, //decode false, //should interpolate kCGRenderingIntentDefault //intent ); // Getting UIImage from CGImage UIImage *finalImage = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); CGDataProviderRelease(provider); CGColorSpaceRelease(colorSpace); return finalImage; }
输出
更多的图像处理效果请看 YouTube .
0 0
- iOS 下使用 OpenCV 实现图像处理
- 使用OpenCV开发iOS图像处理应用
- [置顶]opencv图像处理3--opencv下使用滑动条
- iOS OpenCV 图像灰度处理
- iOS OpenCV 图像灰度处理
- 使用OpenCV开发iOS图像处理应用(To be continued..)
- OPENCV下针对IplImage实现图像增强处理
- OPENCV下针对IplImage实现图像增强处理
- eclipse下用使用opencv用C++做图像处理
- iOS OpenCV 图像美白处理
- Linux下安装opencv图像处理库
- Windows下Matlab使用G++ DLL实现图像处理
- MFC中使用openCV显示、处理图像
- 【图像处理】OpenCV函数threshold的使用
- MFC中使用openCV显示、处理图像
- Android上使用OpenCV处理图像
- Android上使用OpenCV处理图像
- python 使用opencv 对图像mask处理
- 设计模式之建造者模式
- 2016 Multi-University Training Contest 4 Another Meaning
- CSS3弹性盒子布局
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 互联网协议网络Uva1590
- Android selector
- iOS 下使用 OpenCV 实现图像处理
- print_r与var_dump的区别
- Effetive Objective - C 1.Objective 消息转发
- 1138数据结构上机测试2-1:单链表操作A
- Java 重载与重写
- 百分比转小数、计算百分比
- ZCA白化
- iOS笔记 runtime Method Swizzle 方法交换//
- OpenCV 实现特征检测