【发布时间】:2013-02-11 20:54:29
【问题描述】:
我正在使用最新的 SDK 开发一个 iOS 应用程序。
这个应用程序将与 OpenCV 一起使用,我必须在相机上进行缩放,但是,它在 iOS SDK 上不可用,所以我想以编程方式进行。
我必须对每个视频帧进行“缩放”。这是我必须这样做的地方:
#pragma mark - AVCaptureSession delegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
/*Lock the image buffer*/
CVPixelBufferLockBaseAddress(imageBuffer,0);
/*Get information about the image*/
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
//size_t stride = CVPixelBufferGetBytesPerRow(imageBuffer);
//put buffer in open cv, no memory copied
cv::Mat image = cv::Mat(height, width, CV_8UC4, baseAddress);
// copy the image
//cv::Mat copied_image = image.clone();
_lastFrame = [NSData dataWithBytes:image.data
length:image.elemSize() * image.total()];
[DataExchanger postFrame];
/*We unlock the image buffer*/
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
}
你知道如何在NSData 或CMSampleBufferRef 上进行缩放吗?
【问题讨论】:
-
缩放是为了直接显示图像还是为了对像素进行图像处理,因此,您需要访问缩放后的像素数据吗?另外,您将什么定义为缩放:如果我将 640x480 缩放 2,这是否意味着每个像素都会被复制到它旁边 (x) 和它下面 (y) 的像素?
标签: ios opencv camera zooming avfoundation