【问题标题】:c++ OpenCV example to iOS code and UIImagec++ OpenCV 示例到 iOS 代码和 UIImage
【发布时间】:2013-12-26 23:01:07
【问题描述】:

我有一个关于 OpenCV 的问题。 我有一个 C++ 示例,我想将此示例移植到我的 iOS 项目中。 我已经解决了所有编译器问题。 我需要转换这个 c++ 代码:

char* filename;
    Mat input_image;

    //Check if user specify image to process
    if(argc >= 2 )
    {
        filename= argv[1];
        //load image  in gray level
        input_image=imread(filename,1);
    }else{
        printf("Use:\n\t%s image\n",argv[0]);
        return 0;
    } 

我有一个 UIImage 我想获得相应的 Mat input_image。

对应的代码是什么
//load image  in gray level
        input_image=imread(filename,1);?

我试过了,但我有一些问题,我认为这不是对应于imread(filename,1);的正确代码

- (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;
}

【问题讨论】:

    标签: c++ ios opencv uiimage mat


    【解决方案1】:

    您在问题中添加的 iOS 代码对于将 UIImage 转换为 Mat(不使其灰度)完全正确......

    input_image=imread(filename,1);
    

    上面这行代码是用来从文件名加载图片的(就是图片的路径),1是用来做灰度的,

    因此,从文件名加载图像,在 ios 中我们将其用作:

    UIImage *image=[UIImage imagenamed:@"Hello.png"];
    

    并将此图像传递给您的方法将完成您的工作,现在用于制作灰度 Mat,在您的代码中进行以下更改:

    替换以下行:

    CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
    cv::Mat cvMat(rows, cols, CV_8UC4);
    

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
    cv::Mat cvMat = cv::Mat(rows, cols, CV_8UC1);
    

    并在末尾添加这一行

    CGColorSpaceRelease(colorSpace);
    

    【讨论】:

      猜你喜欢
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多