首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否存在类似于cvShowImage for iOS的东西?

是否存在类似于cvShowImage for iOS的东西?
EN

Stack Overflow用户
提问于 2012-04-25 15:53:20
回答 1查看 374关注 0票数 0

我正在处理图像(在AVFoundation上使用OpenCV和iOS),我只想简单地显示CMSampleBufferRef (或IplImage)的内容来显示屏幕。

简单地说是:我只想显示(就像OpenCV的cvShowImage()那样)非转换的图像,看看我是不是在处理损坏或变形的图像。

EN

回答 1

Stack Overflow用户

发布于 2012-04-25 16:08:22

遗憾的是没有。不同的位图表示。

也许你想要一个类别?我用了一些类似这样的东西:

代码语言:javascript
复制
 // NSImage+OpenCV.h
 @interface NSImage (OpenCV)
 + (NSImage*)imageWithCVMat:(const cv::Mat&)cvMat;
 - (id)initWithCVMat:(const cv::Mat&)cvMat;
 - (cv::Ptr<cv::Mat>)cvMat;
 @end

 // NSImage+OpenCV.m
 using namespace cv;
 @implementation NSImage (OpenCV)

 - (id)initWithCVMat:(const cv::Mat&)cvMat {
      NSData *data = [NSData dataWithBytes:cvMat.data
                                 length:cvMat.total()*cvMat.elemSize()];    
      CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
      CGColorSpaceRef colourSpace =  CGColorSpaceCreateDeviceRGB();

      CGImageRef imageRef = CGImageCreate(cvMat.cols,
                                         cvMat.rows,
                                         8,
                                         8 * cvMat.elemSize(),
                                         cvMat.step[0],
                                         colourSpace,                                           
                                         kCGImageAlphaNone |
                                         kCGBitmapByteOrderDefault,
                                         provider,
                                         NULL,
                                         false,
                                         kCGRenderingIntentDefault);       

      NSImage *image = [[NSImage alloc] initWithCGImage:imageRef size:CGSizeMake(cvMat.cols,cvMat.rows)];

      CGColorSpaceRelease(colourSpace);
      CGDataProviderRelease(provider);
      CGImageRelease(imageRef);

      return image;
 }

 +(NSImage*)imageWithCVMat:(const cv::Mat&)cvMat {
    return [[NSImage alloc] initWithCVMat:cvMat];
 }

 - (cv::Ptr<cv::Mat>)cvMat {
      CGImageSourceRef source =  CGImageSourceCreateWithData((__bridge CFDataRef)[self TIFFRepresentation],  NULL);     
      CGImageRef imageRef =  CGImageSourceCreateImageAtIndex(source, 0, NULL);
      cv::Ptr<cv::Mat> cvMat = new cv::Mat(self.size.height, self.size.width, CV_8UC4);          

      CGContextRef contextRef = CGBitmapContextCreate(cvMat->data,
                                                   cvMat->cols,
                                                   cvMat->rows,
                                                   8,
                                                   cvMat->step[0],                                                    
                                                   CGImageGetColorSpace(imageRef),
                                                   kCGImageAlphaNoneSkipLast |
                                                   kCGBitmapByteOrderDefault);   

      CGContextDrawImage(contextRef,
                        CGRectMake(0, 0, cvMat->cols, cvMat->rows),
                        imageRef);

      CGContextRelease(contextRef);
      CGImageRelease(imageRef);

      return cvMat;   
 }

 @end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10319214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档