Быстрый просмотр и захват - PullRequest
2 голосов
/ 04 мая 2009

Мне нужно перевернуть по горизонтали некоторые видео, которые я предпочитаю и снимаю. А-ля iChat, у меня есть веб-камера, и я хочу, чтобы она выглядела так, как будто пользователь смотрит в зеркало.

Я просматриваю видео Quicktime в QTCaptureView. Мой захват делается покадрово (по причинам, в которые я не буду вдаваться) с чем-то вроде:

imageRep = [NSCIImageRep imageRepWithCIImage: [CIImage imageWithCVImageBuffer: frame]];
image = [[NSImage alloc] initWithSize: [imageRep size]];
[image addRepresentation: imageRep];
[movie addImage: image forDuration: someDuration withAttributes: someAttributes];

Какие-нибудь советы?

Ответы [ 3 ]

10 голосов
/ 03 января 2010

Ничего подобного воскрешению старого вопроса. В любом случае, я пришел сюда и почти нашел то, что искал, благодаря Брайану Вебстеру, но если кто-то ищет оптовое решение, попробуйте это после того, как ваш класс будет делегатом экземпляра QTCaptureView:

- (CIImage *)view:(QTCaptureView *)view willDisplayImage:(CIImage *)image {
//mirror image across y axis
return [image imageByApplyingTransform:CGAffineTransformMakeScale(-1, 1)];
}
3 голосов
/ 04 мая 2009

Вы можете сделать это, взяв CIImage, который вы получаете из захвата, и пропустив его через фильтр Core Image, чтобы перевернуть изображение. Затем вы передадите получившееся изображение в ваше изображение, а не в исходное. Код будет выглядеть примерно так:

CIImage* capturedImage = [CIImage imageWithCVImageBuffer:buffer];
NSAffineTransform* flipTransform = [NSAffineTransform transform];
CIFilter* flipFilter;
CIImage* flippedImage;

[flipTransform scaleByX:-1.0 y:1.0]; //horizontal flip
flipFilter = [CIImage filterWithName:@"CIAffineTransform"];
[flipFilter setValue:flipTransform forKey:@"inputTransform"];
[flipFilter setValue:capturedImage forKey:@"inputImage"];
flippedImage = [flipFilter valueForKey:@"outputImage"];
imageRep = [NSCIImageRep imageRepWithCIImage:flippedImage];
...
0 голосов
/ 08 февраля 2013

Попробуй это! Фильтры будут применены к CaptureView, но не к выходному видео.

- (IBAction)Vibrance:(id)sender
{
    CIFilter* CIVibrance = [CIFilter filterWithName:@"CIVibrance" keysAndValues:
                            @"inputAmount", [NSNumber numberWithDouble:2.0f],
                            nil];
    mCaptureView.contentFilters = [NSArray arrayWithObject:CIVibrance];
}

Кстати, вы можете применить любые фильтры из этой ссылки: https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html

...