zoukankan      html  css  js  c++  java
  • OpenCV Mat与UIImage之间的转换

      UIImage 转 OpenCV cvMat:

     1 - (cv::Mat)cvMatWithImage:(UIImage *)image
     2 {
     3     CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
     4     CGFloat cols = image.size.width;
     5     CGFloat rows = image.size.height;
     6     
     7     cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels
     8     
     9     CGContextRef contextRef = CGBitmapContextCreate(cvMat.data,                 // Pointer to backing data
    10                                                     cols,                       // Width of bitmap
    11                                                     rows,                       // Height of bitmap
    12                                                     8,                          // Bits per component
    13                                                     cvMat.step[0],              // Bytes per row
    14                                                     colorSpace,                 // Colorspace
    15                                                     kCGImageAlphaNoneSkipLast |
    16                                                     kCGBitmapByteOrderDefault); // Bitmap info flags
    17     
    18     CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
    19     CGContextRelease(contextRef);
    20     
    21     return cvMat;
    22 }

      OpenCV cvMat 转 UIImage : 

    24 - (UIImage *)UIImageFromCVMat:(cv::Mat)cvMat {
    25     NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize()*cvMat.total()];
    26     
    27     CGColorSpaceRef colorSpace;
    28     CGBitmapInfo bitmapInfo;
    29     
    30     if (cvMat.elemSize() == 1) {
    31         colorSpace = CGColorSpaceCreateDeviceGray();
    32         bitmapInfo = kCGImageAlphaNone | kCGBitmapByteOrderDefault;
    33     } else {
    34         colorSpace = CGColorSpaceCreateDeviceRGB();
    35         bitmapInfo = kCGBitmapByteOrder32Little | (
    36                                                    cvMat.elemSize() == 3? kCGImageAlphaNone : kCGImageAlphaNoneSkipFirst
    37                                                    );
    38     }
    39     
    40     CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
    41     
    42     // Creating CGImage from cv::Mat
    43     CGImageRef imageRef = CGImageCreate(
    44                                         cvMat.cols,                 //width
    45                                         cvMat.rows,                 //height
    46                                         8,                          //bits per component
    47                                         8 * cvMat.elemSize(),       //bits per pixel
    48                                         cvMat.step[0],              //bytesPerRow
    49                                         colorSpace,                 //colorspace
    50                                         bitmapInfo,                 // bitmap info
    51                                         provider,                   //CGDataProviderRef
    52                                         NULL,                       //decode
    53                                         false,                      //should interpolate
    54                                         kCGRenderingIntentDefault   //intent
    55                                         );
    56     
    57     // Getting UIImage from CGImage
    58     UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
    59     CGImageRelease(imageRef);
    60     CGDataProviderRelease(provider);
    61     CGColorSpaceRelease(colorSpace);
    62     
    63     return finalImage;
    64 }
  • 相关阅读:
    《老男孩》
    java中四种阶乘的计算
    DataOutputStream的乱码问题
    java中飞clone方法
    类反射的简单例子
    PHP: 如何连接oracle数据库进行数据读取
    .NET : 如何读取图片中的元数据信息
    重新审视REST
    PHP 的历史
    Image File Format Specifications {转载}
  • 原文地址:https://www.cnblogs.com/riddick/p/10574680.html
Copyright © 2011-2022 走看看