2015-01-27 2 views
0

라이브 카메라 피드가 애니메이션 정적 오버레이로 그레이 스케일로 표시되도록하려고합니다.GPUImage 오버레이 된 애니메이션이 적용된 그레이 스케일 라이브 카메라 피드

그레이 스케일이 작동하기는 쉽지만 이미지를 오버레이하여 알아내는 데 어려움을 겪고 있습니다.

어떤 도움이나 알려 주시면 오버레이 애니메이션을 사용하는 것은 아무 소용이 없습니까? 감사합니다. .

그레이 스케일 코드 :

private var videoCamera: GPUImageVideoCamera? 
private var videoView: GPUImageView? 
private var greyscaleFilter: GPUImageGrayscaleFilter? 

videoCamera = GPUImageVideoCamera(sessionPreset: AVCaptureSessionPreset352x288, cameraPosition: .Back) 

videoView = GPUImageView(frame: CGRect(x: 0, y: 0, width: 352, height: 288)) 
view.addSubview(videoView!) 

greyscaleFilter = GPUImageGrayscaleFilter() 
greyscaleFilter?.addTarget(videoView) 

videoCamera?.addTarget(greyscaleFilter); 
videoCamera?.startCameraCapture() 

편집 : 나는, 내가 GPUImage와 함께 제공되는 예제를 사용하고 있습니다에서 현재 해요하지만 아직 작동하지 않는 이유를 볼 수있는 곳입니다. (overlay.jpg는 필자가 실제로 필요로하는 미묘한 정적 대신 블렌드가 더 분명해질 것이라고 생각하는 테스트에 사용하는 이미지입니다.) 이 코드는 그레이 스케일 비디오로 나타나며, 블렌드 필터는 아무 것도하지 않는 것처럼 보입니다.

videoCamera = GPUImageVideoCamera(sessionPreset: AVCaptureSessionPreset352x288, cameraPosition: .Back) 

videoView = GPUImageView(frame: CGRect(x: 0, y: 0, width: 352, height: 288)) 
view.addSubview(videoView!) 

greyscaleFilter = GPUImageGrayscaleFilter() 
videoCamera?.addTarget(greyscaleFilter) 
greyscaleFilter?.addTarget(videoView) 

blendFilter = GPUImageOverlayBlendFilter() 
videoCamera?.addTarget(blendFilter) 
inputImage = ImageCache.loadImage(named: "overlay.jpg") 
blendImage? = GPUImagePicture(image: inputImage) 
blendImage?.addTarget(blendFilter) 
blendImage?.processImage() 
blendFilter?.addTarget(videoView) 

videoCamera?.startCameraCapture() 

답변

0

마침내 이것으로 돌아가서 정확하게 작동하지 않게되었습니다. 나는 타입의 몇가지를 선택 사항이 아닌 것으로 바꾸었고, 따라서 그것을 수행 한 후에 나의 ViewController의 init (코더 aDecoder : NSCoder) 메소드에서 그들을 초기화해야했다.

아래 코드를 업데이트하십시오.

var videoCamera: GPUImageVideoCamera 
var videoView: GPUImageView 
var greyscaleFilter: GPUImageGrayscaleFilter 
var blendFilter: GPUImageOverlayBlendFilter 
var blendImage: GPUImagePicture? 
var inputImage: UIImage? 

required init(coder aDecoder: NSCoder) { 
    videoCamera = GPUImageVideoCamera(sessionPreset: AVCaptureSessionPreset640x480, cameraPosition: .Back) 
    videoView = GPUImageView(frame: CGRect(x: 0, y: 0, width: 640, height: 480)) 

    blendFilter = GPUImageOverlayBlendFilter() 
    greyscaleFilter = GPUImageGrayscaleFilter() 

    super.init(coder: aDecoder) 
} 

override func viewDidLoad() { 
    view.addSubview(videoView) 

    videoCamera.addTarget(greyscaleFilter) 

    greyscaleFilter.addTarget(blendFilter) 

    let inputImage = ImageCache.loadImage(named: "overlay.jpg") 
    self.blendImage = GPUImagePicture(image: inputImage) 
    self.blendImage?.addTarget(blendFilter) 
    self.blendImage?.processImage() 
    blendFilter.addTarget(videoView) 

    videoCamera.startCameraCapture() 

    super.viewDidLoad() 
}