IOS 图片处理—-OpenCV
来源:互联网 发布:2016中小企业数据统计 编辑:程序博客网 时间:2024/06/05 20:35
IOS 图片处理—-OpenCV
在Opencv中所有的图片处理是基于Mat结构体处理的。然而在iOS中,在屏幕上显示的图片是类UIImage的实例。所以在iOS中使用Opencv,首先需要转换为Mat结构体。下面是Mat和UIImage相互转换。
//从UIImage对象转换为4通道的Mat,即是原图的Mat- (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;}
在使用Mat做出图像处理后,需要将Mat转换会UIImage。以下是灰度图像与彩色图像转换处理(由信道中的值做出处理)。
cv::Mat greyMat;cv::cvtColor(inputMat, greyMat, CV_BGR2GRAY);
处理完图像后,Mat转成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;}
原文地址:OpenCV iOS - Image Processing
0 0
- IOS 图片处理—-OpenCV
- 【OpenCV】opencv处理透明图片
- opencv图片处理
- Opencv-图片简单处理
- opencv处理透明图片
- Android opencv 图片处理
- opencv图片处理基础
- opencv图片膨胀处理
- Opencv 图片的初步处理——平滑处理
- Opencv 图片的初步处理——平滑处理
- Opencv 图片的初步处理——平滑处理
- iOS-Opencv 基础学习四(对图片进行图像模糊处理blur、边缘处理Canny)
- opencv对图片的处理
- opencv对图片的处理
- Opencv 处理图片增加文字
- Opencv 处理图片增加文字
- iOS OpenCV 图像灰度处理
- iOS OpenCV 相机灰度处理
- org.hibernate.LazyInitializationException: could not initialize proxy
- HibernateCallback
- 平衡二叉树的实现
- ViewBag和ViewData的用法和区别
- android平台 java程序 编译
- IOS 图片处理—-OpenCV
- Zurmo(十四)之ListView重写SecuredActionBar
- EOS7+中结合NUI实现流程图和活动信息的显示
- XFire创建WebService实例
- 代理的三种方法
- c/c++ No.16 求字符串长度
- string封装一些小函数
- lintcode(61)搜索区间
- cmd命令下进入mysql并查看数据库