美文网首页
iOS UIImage和OpenCV图片格式的转换,cvMat和

iOS UIImage和OpenCV图片格式的转换,cvMat和

作者: wodeph | 来源:发表于2023-05-30 16:28 被阅读0次

注意:我用的 jpg 图片

    UIImage*image1 = [UIImageimageNamed:@"image1"];

    UIImage*image2 = [UIImageimageNamed:@"image2"];

    cv::Matcv_image1 = [selfcvMatFromUIImage:image1];

    cv::Matcv_image2 = [selfcvMatFromUIImage:image2];

    //转换为灰度图片

//    cv::Mat greyMat;

//    cv::cvtColor(cv_image2, greyMat, cv::COLOR_BGR2GRAY);

//    UIImage *image3= [self UIImageFromCVMat:greyMat];

- (cv::Mat)cvMatFromUIImage:(UIImage*)image

{

  CGColorSpaceRefcolorSpace =CGImageGetColorSpace(image.CGImage);

  CGFloatcols = image.size.width;

  CGFloatrows = image.size.height;

  cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels (color channels + alpha)

  CGContextRefcontextRef =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);

  returncvMat;

}

-(UIImage *)UIImageFromCVMat:(cv::Mat)cvMat

{

  NSData*data = [NSDatadataWithBytes:cvMat.datalength: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

  CGImageRefimageRef =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 = [UIImageimageWithCGImage:imageRef];

  CGImageRelease(imageRef);

  CGDataProviderRelease(provider);

  CGColorSpaceRelease(colorSpace);

  returnfinalImage;

 }

相关文章

网友评论

      本文标题:iOS UIImage和OpenCV图片格式的转换,cvMat和

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