GPUImage色度键filter
我正在尝试使用GPUImage框架的色度键filter。 我跟着Filtershowcase的例子,但显然我错过了一些事情,只显示video,但没有绿屏输出效果。 这是我的video摄像头/filter的初始化:
camera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack]; camera.outputImageOrientation = UIInterfaceOrientationLandscapeLeft; camera.horizontallyMirrorFrontFacingCamera = NO; camera.horizontallyMirrorRearFacingCamera = NO; chromaKeyFilter = [[GPUImageChromaKeyFilter alloc] init]; chromaKeyFilter.thresholdSensitivity = sliderThres.value; UIImage *inputImage = [UIImage imageNamed:@"WID-small.jpg"]; GPUImagePicture *sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; [camera addTarget:chromaKeyFilter]; [sourcePicture addTarget:chromaKeyFilter]; [sourcePicture processImage]; [chromaKeyFilter addTarget:viewCamera]; [camera startCameraCapture];
所以相机和sourcePicture都进入了滤镜,滤镜比进入viewCamera。 但是现在,我只看到简单的video,没有抠像效果。 (我有一个滑块,改变了门槛)。
用GPUImageChromaKeyBlendFilter 更新
camera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack]; camera.outputImageOrientation = UIInterfaceOrientationLandscapeLeft; chromaKeyFilter = [[GPUImageChromaKeyBlendFilter alloc] init]; UIImage *inputImage; inputImage = [UIImage imageNamed:@"WID-small.jpg"]; GPUImagePicture *sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; [camera addTarget:chromaKeyFilter]; [sourcePicture processImage]; [sourcePicture addTarget:chromaKeyFilter]; [chromaKeyFilter addTarget:viewCamera]; [camera startCameraCapture];
有了这个filter,它简单地用黑色取代,而不是实际的图像。
经过几天的尝试….find了这个gem 。 显然你应该坚持(强大的参考)GPUImagePicture。 我以为内部的过滤链会有很强的参考,但事实并非如此。 保持它作为实例var解决了这个问题。
我想你想GPUImageChromaKeyBlendFilter,而不是GPUImageChromaKeyFilter。
混合采用两个源图像,并将第一个图像中的键控颜色与第二个图像中的像素进行匹配。 常规色度键控filter简单地将与目标色彩匹配的像素的alpha通道减less到0.0,而不会混合到另一个图像中。
与原始问题类似,我想在自定义视图层次结构上放置一个绿色屏幕video。 现场video。 原来,使用标准的GPUImage ChromaKeyfilter是不可能的。 它混合了绿色像素和背景像素,而不是alpha混合。 例如红色背景变成黄色,蓝色变成青色。
实现它的工作方式涉及两个步骤:
1)确保filterview有一个透明的背景:
filterView.backgroundColor=[UIColor clearColor];
2)修改GPUImageChromaKeyFilter.m
old: gl_FragColor = vec4(textureColor.rgb, textureColor.a * blendValue); new: gl_FragColor = vec4(textureColor.rgb * blendValue, 1.0 * blendValue);
现在,video中的所有键控(例如绿色)像素都变为透明,并揭示filterview下方的所有像素。 (在线 – )video。
你是否设置了滑块的目标和select器?
这对我有效
[(GPUImageChromaKeyFilter *)filter setThresholdSensitivity:[(UISlider *)sender value]]; [image setImage:[filter imageByFilteringImage:sourceImage]];
希望有所帮助。