2

GPUImage フレームワークのクロマキー フィルターを使用しようとしています。私は Filtershowcase の例に従いましたが、ビデオのみが表示され、グリーンスクリーンのキーアウト効果がないため、明らかに何かが欠けています。ビデオカメラ/フィルターの初期化は次のとおりです。

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

したがって、camera と sourcePicture はどちらもフィルタにフィードされ、filter は viewCamera に渡されます。しかし、今は普通のビデオしか見られず、クロマキー効果はありません。(しきい値を変更するスライダーがあります)。

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

このフィルターを使用すると、実際の画像ではなく、単純に黒に置き換えられました。

4

4 に答える 4

3

数日間試してみて、この宝石を見つけました。どうやらあなたはGPUImagePictureに固執することを想定しています(強い参照)。フィルターチェーンは内部的に強い参照があるという印象を受けましたが、そうではありません。インスタンス変数として保持することで問題が解決しました。

于 2012-11-21T18:22:38.293 に答える
1

GPUImageChromaKeyFilter ではなく、GPUImageChromaKeyBlendFilter が必要だと思います。

ブレンドは 2 つのソース イメージを取り込み、最初のイメージのキーイング カラーに一致するピクセルを 2 番目のイメージのピクセルに置き換えます。通常のクロマ キー フィルターは、ターゲット カラーに一致するピクセルのアルファ チャネルを単純に 0.0 に減らします。別の画像に溶け込むことはありません。

于 2012-11-20T16:29:48.910 に答える
1

元の質問と同様に、カスタム ビュー階層を含むグリーン スクリーン ビデオを配置したいと考えていました。ライブビデオ。これは、標準の GPUImage ChromaKey フィルターでは不可能であることが判明しました。アルファブレンディングの代わりに、緑のピクセルを背景のピクセルとブレンドしました。たとえば、赤い背景は黄色になり、青はシアンになりました。

機能させるには、次の 2 つの手順が必要です。

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);

これで、ビデオ内のすべてのキー付き (たとえば緑) ピクセルが透明になり、フィルタービューの下にあるものを明らかにします。(ライブ)ビデオ。

于 2013-04-23T12:10:44.203 に答える
0

スライダーのターゲットとセレクターを設定しましたか?

これは私のために働いた

[(GPUImageChromaKeyFilter *)filter setThresholdSensitivity:[(UISlider *)sender value]];
        [image setImage:[filter imageByFilteringImage:sourceImage]];

それが役立つことを願っています。

于 2012-11-19T18:27:40.830 に答える