Tutorial :Flipping Quicktime preview & capture



Question:

I need to horizontally flip some video I'm previewing and capturing. A-la iChat, I have a webcam and want it to appear as though the user is looking in a mirror.

I'm previewing Quicktime video in a QTCaptureView. My capturing is done frame-by-frame (for reasons I won't get into) with something like:

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

Any tips?


Solution:1

You could do this by taking the CIImage you're getting from the capture and running it through a Core Image filter to flip the image around. You would then pass the resulting image into your image rep rather than the original one. The code would look something like:

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];  ...  


Solution:2

Nothing like resurrecting an old question. Anyway I came here and almost found what I was looking for thanks to Brian Webster but if anyone is looking for the wholesale solution try this after setting your class as the delegate of the QTCaptureView instance:

- (CIImage *)view:(QTCaptureView *)view willDisplayImage:(CIImage *)image {  //mirror image across y axis  return [image imageByApplyingTransform:CGAffineTransformMakeScale(-1, 1)];  }  


Solution:3

Try this! it will apply filters to CaptureView, but not to the output video.

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

btw, you can apply any filters from this ref: https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »