0
我正在处理图像(在iOS上使用AVFoundation和OpenCV),我想只需显示CMSampleBufferRef(或IplImage)的内容到屏幕。是否存在类似iOS的cvShowImage?
简单:我只是想显示(像OpenCV中的cvShowImage()
)未转换的图像,看我不处理损坏或以某种方式变形图像。
我正在处理图像(在iOS上使用AVFoundation和OpenCV),我想只需显示CMSampleBufferRef(或IplImage)的内容到屏幕。是否存在类似iOS的cvShowImage?
简单:我只是想显示(像OpenCV中的cvShowImage()
)未转换的图像,看我不处理损坏或以某种方式变形图像。
很遗憾没有。不同的位图表示。
也许你想要一个类别?我用的东西沿着这行:
// 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
您可能需要到NSImage中到UIImage的引用来改变,使与iOS这项工作,但我觉得最核心的图形代码的其余部分应该是相当接近你需要一个UIImage。 – 2012-04-25 16:52:15
谢谢你的回复。我已经知道一个iOS替代品('UIImage + OpenCV'),但像'cvShowImage()'这样直截了当的东西可能不存在... – user961912 2012-04-25 18:39:16