以前从没有接触过这块,经过一段艰难的爬坑,自己还是理解了一下东西,在这里跟同学们分享下,希望对你有帮助!
1.openCV配置的话,自己百度吧,这里不说了!
2.首先我们来看openCV!我认为这个openCV是个非常牛逼的东西,还特意的买了一本书,看了看,就丢一边去了,最后送给英雄去了。。(宝刀配英雄嘛,还是个女英雄)。GPUimage,大家都知道吧,这个直播就做过写,但是openCV完全不一样,一个是面向对象,一个面向过程的。openCV各种跨平台,其中我最郁闷的就是在Xcode里面我不知道我自己用的是C还是C++的东西。!openCV的各种蛋疼我就不BB了。(最后总结了下,openCV是做底层的人玩的。还要一定的图像专业知识)。
openCV常见的数据类型有
Mat;(这个是C语言的);
CV::mat(是C++的,还说什么自动释放内存,坑的我不行);
IplImage(这个类型,先说下这个类型在iOS上咋弄);
直接贴代码。。
创建 cvCreateImage(cvsizi,字节位数,几个通道);
iplimage->imageData,//位图数据
iplimage->width,//宽度
iplimage->height,//长度
iplimage->depth,//深度
iplimage->nChannels,//通道
iplimage->widthStep,// bitmap的每一行在内存所占的比特数.
iplimage->channelSeq);//模式
这样的你可以看到openCVimage是一个什么样的数据。。!
在iOSCoregraohics框架下 有
CGContextRef contextRef = CGBitmapContextCreate(iplimage->imageData,//位图数据源
iplimage->width,
iplimage->height,
iplimage->depth,//深度
iplimage->widthStep,
colorSpace,//颜色
kCGImageAlphaNoneSkipLast|kCGBitmapByteOrderDefault);//第一个参数根据UIimage确定,打印
// 画一个UIimage。
//CGContextDrawImage(<#CGContextRef _Nullable c#>, <#CGRect rect#>, <#CGImageRef _Nullable image#>)
CGContextDrawImage(contextRef, //画的地方在哪里,上下文
CGRectMake(0, 0, image.size.width, image.size.height),//画的大小在哪里
imageRef);//画那个图片
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);
函数解释
// CGBitmapContextCreate(
// <#void * _Nullable data#>,指向要渲染的绘制内存的地址。这个内存块的大小至少(bytesPerRow*height)个字节
// <#size_t width#>bitmap的宽度,单位为像素
// <#size_t height#>,bitmap的高度,单位为像素
// <#size_t bitsPerComponent#>,内存中像素的每个组件的位数.例如,对于32位像素格式和RGB 颜色空间,你应该将这个值设为8.
// <#size_t bytesPerRow#>, bitmap的每一行在内存所占的比特数
// <#CGColorSpaceRef _Nullable space#>, bitmap上下文使用的颜色空间
// <#uint32_t bitmapInfo#>);指定bitmap是否包含alpha通道,像素中alpha通道的相对位置,像素组件是整形还是浮点型等信息的字符串
通过nsdata创建一个图片
//自己的操作后数据
NSData *dataprovider = [NSData dataWithBytes:data length:imah->imageSize];
//转化为数据提供者
CGDataProviderCreateWithCFData((CFDataRef)dataprovider);
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)dataprovider);
CGImageRef rdf = CGImageCreate(
imah->width,//图片的宽度
imah->height,//图片的高度
imah->depth,//图片的深度
imah->depth * imah->nChannels,//每个像素的总比特数= 深度*通道数
imah->widthStep,//这个我也不明白,每一行占用的字节数,注意这里的单位是字节
colorSpace,//颜色 ,自定定义要与上匹配
kCGImageAlphaNoneSkipLast | kCGImageAlphaPremultipliedLast,//这个更加不明白,这个很重要 要跟图片匹配的,位图像素布局,这是个枚举 !
provider,//数据源提供者,自己创建!
NULL,//解码渲染数组
false,//不要邻角,是否抗锯齿
kCGRenderingIntentDefault);//图片相关参数,默认显示(这个)
UIImage *image = [UIImage imageWithCGImage:rdf];
CGImageRelease(rdf);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return image;
突然发现如果要写的话太多了。。!写不完,有空在写把。。!
网友评论