美文网首页
iOS openCV爬坑史

iOS openCV爬坑史

作者: HotRay | 来源:发表于2017-05-23 16:08 被阅读0次

    以前从没有接触过这块,经过一段艰难的爬坑,自己还是理解了一下东西,在这里跟同学们分享下,希望对你有帮助!
    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;
    

    突然发现如果要写的话太多了。。!写不完,有空在写把。。!

    相关文章

      网友评论

          本文标题:iOS openCV爬坑史

          本文链接:https://www.haomeiwen.com/subject/ktxlbttx.html