2012-04-25 63 views
0

我正在处理图像(在iOS上使用AVFoundation和OpenCV),我想只需显示CMSampleBufferRef(或IplImage)的内容到屏幕。是否存在类似iOS的cvShowImage?

简单:我只是想显示(像OpenCV中的cvShowImage())未转换的图像,看我不处理损坏或以某种方式变形图像。

回答

0

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

也许你想要一个类别?我用的东西沿着这行:

// 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 
+1

您可能需要到NSImage中到UIImage的引用来改变,使与iOS这项工作,但我觉得最核心的图形代码的其余部分应该是相当接近你需要一个UIImage。 – 2012-04-25 16:52:15

+0

谢谢你的回复。我已经知道一个iOS替代品('UIImage + OpenCV'),但像'cvShowImage()'这样直截了当的东西可能不存在... – user961912 2012-04-25 18:39:16

相关问题